全局二值化
threshold(src,thresh(阈值),maxval(最大值,默认255),type(选择二值化的类型)),会返回两个值,一个是阈值,一个是二值化后的图像
全局二值化的原理
将小于阈值的像素转化为0或255,将大于阈值的值转化为255或0(具体如何转换,要看采用何种二值化的类别)
二值化的类型
二值化的效果
左边是原图,右边是二值化图
自适应阈值
adaptiveThreshold(src,maxval,adaptiveMethod(计算阈值的方法),thresholdType(二值化的类型),blocksize(卷积核的大小),C(偏差))
由于全局二值化只采用一个阈值对整个图像进行处理,对一些明亮分布不均匀的图像效果很差,所以在同一幅图像的不同区域采用不同的阈值,使我们能在明亮分布不均匀的图像中得到更好的结果
计算阈值的方法
cv2.ADAPTIVE_THRESHOLD_MEAN_C:阈值取自相邻区域的平均值
cv2.ADAPTIVE_THRESHOLD_GAUSSIAN_C:阈值取自相邻区域的加权和,权重是一个高斯窗口
获取形态学卷积核
getStructuringElement(shape(是指卷积核内部1的分布情况),ksize)
shape
cv2.MORPH_RECT:生成矩阵形式的全为1的卷积核
cv2.MORPH_ELLIPSE:生成椭圆状的全为1的卷积核,其余位置为0
cv2.MORPH_CROSS:生成十字架样式的全为1的卷积核,其余位置为0
腐蚀
erode(src,kernel,iterations(迭代次数))
腐蚀就是用卷积核扫描图像,如果卷积核内的像素点都是白色,则锚点为白色
使用腐蚀后,一般图形都会小一圈(边缘被腐蚀掉了)
腐蚀效果
左边是原图,右边是腐蚀化的图
膨胀
dilate(src,kernel,iterations)
膨胀就是用卷积核扫描图像,只要卷积核的锚点是非0值,无论周围是不是非0值,都变成非0值
膨胀后的图形,一般都会大一圈
膨胀效果
左边是原图,右边是膨胀化的图
开运算
开运算 = 腐蚀 + 膨胀
开运算是morphologyEx中op的一个选择参数,即cv2.MORPH_OPEN
开运算适用于图像中图形外部有“脏东西”且处理完“脏东西”还可以恢复原图形形状的情况
开运算效果
左边是原图,右边是开运算后的图
闭运算
闭运算 = 膨胀 + 腐蚀
闭运算是morphologyEx中op的一个选择参数,即cv2.MORPH_CLOSE
闭运算适用于图像中图形内部有“脏东西”且处理完“脏东西”还可以恢复原图形形状的情况
闭运算效果
左边是原图,右边是闭运算后的图
形态学梯度
形态学梯度 = 原图 - 腐蚀
由于腐蚀之后,图形变小了,也就是腐蚀掉了边缘,所以用原图 - 腐蚀就等于边缘,也就是形态学梯度
形态学梯度也有直接的api,morphologyEx中op的一个选择参数,即cv2.MORPH_GRADIENT
形态学梯度与Canny算子的比较结果
左边是Canny,右边是形态学梯度
顶帽操作
顶帽操作 = 原图 - 开运算
开运算的结果是得到无杂质的图形,所以顶帽操作得到的是图像中图形外的杂质
顶帽操作也有api,morphologyEx中op的一个选择参数,即cv2.MORPH_TOPHAT
顶帽操作的效果
img图中左边是原图,右边是调用顶帽api的图,dst3是原图 - 开运算的结果,dst6是原图 - (先腐蚀后膨胀)的结果,没有太大区别
黑帽操作
黑帽操作 = 原图 - 闭运算
闭运算的结果是得到无杂质的图形,所以黑帽操作得到的是图像中图形内的杂质
黑帽操作也有api,morphologyEx中op的一个选择参数,即cv2.MORPH_BLACKHAT
黑帽操作的结果
img是原图,dst1是调用黑帽api的结果,dst2是原图 - 闭运算的结果,dst3是原图 - (先膨胀后腐蚀)的结果,可以看出黑帽api与直接公式计算出来的效果有一点点不一样