Python本身不支持改变像素大小来修改存储空间,但是可以使用第三方库来实现这一功能。Pillow是一个开源的Python图像处理库,可以用来修改的大小,从而减少存储空间。
使用Pillow库,可以使用resize()函数来调整的大小:
from PIL import Image
img = Imageopen('imagejpg')
img = imgresize((200, 200)) # 调整大小为200x200像素
imgsave('image_resizedjpg') # 保存调整后的
1图像矩
帮你计算一些属性,比如重心,面积等。
函数cv2moments()会给你一个字典,包含所有矩值
你可以从这个里面得到有用的数据比如面积,重心等。重心可以用下面的式子得到:
2轮廓面积
轮廓面积由函数cv2contourArea()得到或者从矩里得到M['m00']
3轮廓周长
可以用cv2arcLength()函数得到。第二个参数指定形状是否是闭合的轮廓(如果传True)。或者只是一个曲线。
4轮廓近似
这会把轮廓形状近似成别的边数少的形状,边数由我们指定的精确度决定。这是Douglas-Peucker算法的实现。
要理解这个,假设你试图找一个图像里的方块,但是由于图像里的一些问题,你得不到一个完美的方块,只能得到一个“坏方块”。现在你可以使用这个函数来近似,第二个参数叫epsilon,是从轮廓到近似轮廓的最大距离。是一个准确率参数,好的epsilon的选择可以得到正确的输出。
在下面第二个图像里,绿线显示了epsilon = 10% of arc length 的近似曲线。第三个图像显示了epsilon = 1% of the arc length。第三个参数指定曲线是否闭合。
5凸形外壳
凸形外壳和轮廓近似类似,但是还不一样(某些情况下两个甚至提供了同样的结果)。这儿,cv2convexHull()函数检查凸面曲线缺陷并修复它。一般来说,凸面曲线总是外凸的,至少是平的,如果它内凹了,这就叫凸面缺陷。比如下面这张图,红线显示了手的凸形外壳。双向箭头显示了凸面缺陷,是轮廓外壳的最大偏差。
参数详情:
·points 是我们传入的轮廓
·hull 是输出,一般我们不用传
·clockwise: 方向标示,如果是True,输出凸形外壳是顺时针方向的。否则,是逆时针的。
·returnPoints:默认是True。然后会返回外壳的点的坐标。如果为False,它会返回轮廓对应外壳点的索引。
所以要获得凸形外壳,下面
但是如果你想找到凸面缺陷,你需要传入returnPoints = False。我们拿上面的矩形图形来说,首先我找到他的轮廓cnt,现在用returnPoints = True来找他的凸形外壳,我得到下面的值:[[[234 202]], [[51 202]], [51 79]], [[234 79]]] 是四个角的点。如果你用returnPoints = False,我会得到下面的结果:[[129], [67], [0], [142]] 这是轮廓里对应点的索引,比如cnt[129] = [234, 202]],这和前面结果一样。
6检查凸面
有一个函数用来检查是否曲线是凸面, cv2isContourConvex()它返回True或False。
7边界矩形
有两种边界矩形
7a正边界矩形
这个矩形不考虑对象的旋转,所以边界矩形的面积不是最小的,函数是cv2boundingRect()。
假设矩形左上角的坐标是(x,y), (w, h)是它的宽和高
7b渲染矩形
这个边界矩形是用最小面积画出来的,所以要考虑旋转。函数是cv2minAreaRect()。它返回一个Box2D结构,包含了(左上角(x,y),(width, height),旋转角度)。但是要画这个矩形我们需要4个角。这四个角用函数cv2boxPoints()得到
8最小闭包圆
我们找一个目标的外接圆可以用函数cv2minEnclosingCircle()这个圆用最小面积完全包围目标。
9椭圆
用一个椭圆来匹配目标。它返回一个旋转了的矩形的内接椭圆
10 直线
类似的我们可以匹配一根直线,下面的图像包含一系列的白色点,我们可以给它一条近似的直线。
END
:
OpenCV-Python的大小取决于你使用的构建器。如果你使用pip安装,它可能会在50MB至200MB之间变化,具体取决于依赖项。如果你从源代码进行构建,它可能会更大,因为将编译所有可用构建器中的所有模块。
0下载安装Opencv,当前版本为249
1下载Python,当前OPencv版本为249,不过其支持的最新版本的Python为27,所以可以下载276版本。
2下载numpy,开始我使用了16,没有通过,错误如图。下载了最新的181版本。
3将Opencv安装目录下opencv\build\python\27\x86中的cv2pyd复制到python安装目录Lib\site-packages下。
4找到opencv源文件内的drawpy运行。
~如果你认可我的回答,请及时点击采纳为满意回答按钮
~~手机提问的朋友在客户端右上角评价点满意即可。
~你的采纳是我前进的动力
~~O(∩_∩)O,记得好评和采纳,互相帮助,谢谢。
算法效果比较博文
用于表示和量化图像的数字列表,简单理解成将转化为一个数字列表表示。特征向量中用来描述的各种属性的向量称为特征矢量。
参考
是一种算法和方法,输入1个图像,返回多个特征向量(主要用来处理图像的局部,往往会把多个特征向量组成一个一维的向量)。主要用于图像匹配(视觉检测),匹配图像中的物品。
SIFT论文
原理
opencv官网解释
实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。
尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。
其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。
对现实中物体的描述一定要在一个十分重要的前提下进行,这个前提就是对自然界建模时的尺度。当用一个机器视觉系统分析未知场景时,计算机没有办法预先知道图像中物体的尺度,因此我们需要同时考虑图像在多尺度下的描述,获知感兴趣物体的最佳尺度。图像的尺度空间表达指的是图像的所有尺度下的描述。
KeyPoint数据结构解析
SURF论文
原理
opencv官网解释
SURF是SIFT的加速版,它善于处理具有模糊和旋转的图像,但是不善于处理视角变化和光照变化。在SIFT中使用DoG对LoG进行近似,而在SURF中使用盒子滤波器对LoG进行近似,这样就可以使用积分图像了(计算图像中某个窗口内所有像素和时,计算量的大小与窗口大小无关)。总之,SURF最大的特点在于采用了Haar特征以及积分图像的概念,大大加快了程序的运行效率。
因为专利原因,OpenCV33开始不再免费开放SIFT\SURF,需要免费的请使用ORB算法
ORB算法综合了FAST角点检测算法和BRIEFF描述符。
算法原理
opencv官方文档
FAST只是一种特征点检测算法,并不涉及特征点的特征描述。
论文
opencv官方文档
中文版
Brief是Binary Robust Independent Elementary Features的缩写。这个特征描述子是由EPFL的Calonder在ECCV2010上提出的。主要思路就是在特征点附近随机选取若干点对,将这些点对的灰度值的大小,组合成一个二进制串,并将这个二进制串作为该特征点的特征描述子。文章同样提到,在此之前,需要选取合适的gaussian kernel对图像做平滑处理。
1:不具备旋转不变性。
2:对噪声敏感
3:不具备尺度不变性。
ORB论文
OpenCV官方文档
ORB采用了FAST作为特征点检测算子,特征点的主方向是通过矩(moment)计算而来解决了BRIEF不具备旋转不变性的问题。
ORB还做了这样的改进,不再使用pixel-pair,而是使用9×9的patch-pair,也就是说,对比patch的像素值之和,解决了BRIEF对噪声敏感的问题。
关于计算速度:
ORB是sift的100倍,是surf的10倍。
对数据、特征分布的一种统计
对数据空间(bin)进行量化
Kmeans
边缘:尺度问题->不同的标准差 捕捉到不同尺度的边缘
斑点 Blob:二阶高斯导数滤波LoG
关键点(keypoint):不同视角之间的映射,配准、拼接、运动跟踪、物体识别、机器人导航、3D重建
SIFT\SURF
OpenCV是一个C++库,用于实时处理计算机视觉方面的问题,涵盖了很多计算机视觉领域的模块。
OpenCV有两个Python接口,老版本的cv模块使用OpenCV内置的数据类型,新版本的cv2模块使用NumPy数组。对于新版本的模块,可以通过下面方式导入:
import cv21
而老版本的模块则通过下面方式导入:
import cv2cv1
11 在Python中配置opencv
Windows下Python安装OpenCV详细步骤
本机Win7,Python35,OpenCV249
将D:\OpenCV\opencv\build\python\27\x86下的cv2pyd文件copy到D:\Python\Python35-32\Lib\site-packages文件夹中。
出现错误:
尽管有博客言之:目前opencv只支持python26和python27,不死心,终于被我发现了下面这个博客: win7 64位 python34&opencv30配置安装教程
找到指定的版本,下载相应的opencv:Opencv下载网址
使用pip安装pip install whl
测试,安装成功!
12 读取、写入图像
下面是一个简单地载入图像、打印尺寸,保存图像的例子:
#!/usr/bin/env python3 # -- coding: utf-8 -- import cv2# 载入图像im = cv2imread('/0png')# 打印图像尺寸h,w = imshape[:2]print(h,w)# 保存PNG格式图像为JPEG格式cv2imwrite('/0jpg',im)12345678910111213
13 颜色空间转换
在OpenCV中,图像不是用常规的RGB颜色通道来存储的,他们用的顺序是BGR顺序。当读取一幅图像后,默认的是BGR,不过有很多转换方式可以利用。颜色空间转换函数可以用cvtColor()完成。
#!/usr/bin/env python3 # -- coding: utf-8 -- import cv2# 载入图像im = cv2imread('/2png')print(imshape)# create a grayscale versiongray = cv2cvtColor(im, cv2COLOR_BGR2GRAY)
print(grayshape)1234567891011
结果为:
14 显示图像
#!/usr/bin/env python3 # -- coding: utf-8 -- import cv2# from matplotlib import pyplot as pltfrom pylab import # 添加中文字体支持from matplotlibfont_manager import FontPropertiesfont = FontProperties(fname=r"c:\windows\fonts\SimSunttc",size = 14)# 载入图像im = cv2imread('Middlebury_01_clean_colorpng')# 颜色空间转换gray = cv2cvtColor(im, cv2COLOR_BGR2GRAY)# 显示原始图像fig = pltfigure()
subplot(121)
pltgray()
imshow(im)
title(u'彩色图', fontproperties= font)
axis('off')# 显示灰度化图像pltsubplot(122)
pltgray()
imshow(gray)
title(u'灰度图', fontproperties= font)
axis('off')
show()12345678910111213141516171819202122232425262728293031
显示结果:
、
参考链接:Python计算机视觉编程
当你完成图像分割之后,图像轮廓检测往往可以进一步筛选你要的目标,OpenCV中可以使用cv2findContours来得到轮廓。
补充 :
再不少场景中,找轮廓的最小外接矩形是基本需求,opencv中minAreaRect得到的是一个带有旋转角度信息的rect,可以使用cv2boxPoints(rect)来将其转为矩形的四个顶点坐标(浮点类型)你也可以使用cv2polylines来绘制这样的轮廓信息
注意findContours参数的变化,在opencv4中,返回值只有contours和hierarchy ,这一点与opencv3中不同。对与轮廓的层级结构,比较难用,虽然可以通过轮廓的层级结构来进行索引你需要的轮廓,不过对于大部分机器视觉应用场景,二值化的结果有时候很难预料,单单通过这种层级关系索引,非常容易出错。所以,只找最外部结构的 cv2RETR_EXTERNAL 是不是真香呢?
处理cv2approxPolyDP()外,你也可以使用cv2convexHull来求轮廓的近似凸包,其中凸形状内部--任意两点连线都在该形状内部。
clockwise :默认为False,即轮廓为逆时针方向进行排列;
returnPoints :设置为False会返回与凸包上对应的轮廓的点索引值,设置为True,则会返回凸包上的点坐标集,默认为True
对于opencv-python的提取图像轮廓部分有问题欢迎留言, Have Fun With OpenCV-Python, 下期见。
以上就是关于python不改变像素大小修改存储空间全部的内容,包括:python不改变像素大小修改存储空间、OpenCV-Python教程:19.轮廓属性、opencv-python多大等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)