图像的基础操作
1、ROI
ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。使用ROI圈定你想读的目标,可以减少处理时间,增加精度。2、获取图像属性
图像的属性包括
行,列,通道:img.shape图像数据类型: img.dtype像素数目:img .size3、拆分及合并图像通道
拆分通道:b,g,r = cv2.split(img)合并通道:cv2.merge((b,g,r))4、图像填充边界
创建一个类似相框的边界,这经常在卷积运算或者0填充时使用 cv2.copyMakeBorder( src, top, bottom, left, right, borderType, value)
src : 输入图像top, bottom, left, right:对应边界的像素数目borderType: 添加哪种类型的边界
cv2.BORDER_CONSTANT 添加有?色的常数值边界,还需要添加下一个参数(value)。cv2.BORDER_REFLECT 边界元素的镜像 cv2.BORDER_WRAPvalue: 边界颜色,类似(255,255,255)实例
图像的算术操作
1、图像加法: 图像加法,实际上就是矩阵的加法,即矩阵内不元素相加。
2、图像混合:图像混合不同于图像相加,这种操作会给每幅图片一个权重,达到一种混合或者透明的效果。可以根据 g(x)=(1-¢)·f 1+ ¢·f2,即有dst = a·img1 + b·img2 +c, 一般c取0即可。
cv2.addWeighted(img1,a,img2,b,c)
3、按位操作,可以用来添加标签,logo之类的操作。
一般的位操作有:AND,OR,NOT,XOR等。首先选取两张图,一张作为背景图,另外一张作为标签图。
然后选取ROI区域。
接下来就是图像二值化。
其中用到了 cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst,其中几个参数需要注意下,
src:表示的是图片源,只能输入单通道图像,通常来说为灰度图thresh:表示的是阈值(起始值)maxval:表示的是最大值type:表示的是这里划分的时候使用的是什么类型的算法,常用值为0(cv2.THRESH_BINARY)
cv2.bitwise_not(mask):将图片的像素取反,即0变为255,255变为0。cv2.bitwise_and(roi, roi, mask=mask) 和 cv2.bitwise_and(img1, img1, mask=mask_inv)
roi/img1:图像矩阵1roi/img1:图像矩阵2mask:掩膜,默认选项下图即二值化操作。
最后,将两组矩阵相加,得到结果如下。
图像阀值
简单阀值- cv2.threshhold(grayimg, thres, res-thres, flag)
这个函数的第一个参数就是原图的灰度图。第二个参数就是用来对像素值分类的阀值。第三个参数就是当像素值高于(有时是小于)阀值时应给予的新的像素值。OpenCV提供了多种不同的阀值方法由第四个参数来决定的,一般包括cv2.THRESH_BINARY,cv2.THRESH_BINARY_INV, cv2.THRESH_TRUNC, cv2.THRESH_TOZERO, cv2.THRESH_TOZERO_INV自适应阀值
使用是全局阀值时整幅图像用同一个数作为阀值。但是这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们就需要用自适应阀值。此时的阀值是根据图像上的每一个小区域计算与其对应的阀值。因此在同一幅图像上的不同区域采用的是不同的阀值,从而使我们能在亮度不同的情况下得到更好的结果。这种情况下需要指定三个参数,返回一个结果。
cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2)Adaptive Method- 指定计算阀值的方法。
cv2.ADPTIVE_THRESH_MEAN_C:阀值取自相邻区域的平均值cv2.ADPTIVE_THRESH_GAUSSIAN_C:阀值取值相邻区域的加权和,权重为一个高斯窗口。Block Size - 邻域大小(用来计算阀值的区域大小)。C - 就是一个常数,阀值就等于平均值或者加权平均值减去这个常数。