1、二进制阈值化
该方法先要选定一个特定的阈值量,比如127。
(1) 大于等于127的像素点的灰度值设定为最大值(如8位灰度值最大为255)
(2) 灰度值小于127的像素点的灰度值设定为0
例如,163->255,86->0,102->0,201->255。
关键字为 cv2.THRESH_BINARY
img=cv2.imread("C:/picture/dog.jpg")
GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
r,b=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY)
print(r)
cv2.imshow("img",img)
cv2.imshow("result",b)
输出为两个返回值,r为127,b为处理结果(大于127设置为255,小于设置为0)。
2、反二进制阈值化
该方法与二进制阈值化方法相似,先要选定一个特定的灰度值作为阈值,比如127。
(1) 大于127的像素点的灰度值设定为0(以8位灰度图为例)
(2) 小于该阈值的灰度值设定为255
例如,163->0,86->255,102->255,201->0。
关键字为 cv2.THRESH_BINARY_INV
该方法得到的结果正好与二进制阈值化方法相反,亮色元素反而处理为黑色,暗色处理为白色。
result=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY_INV)
3、截断阈值化
该方法需要选定一个阈值,图像中大于该阈值的像素点被设定为该阈值,小于该阈值的保持不变,比如127。
(1) 大于等于127的像素点的灰度值设定为该阈值127
(2) 小于该阈值的灰度值不改变
例如,163->127,86->86,102->102,201->127。
关键字为 cv2.THRESH_TRUNC
r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TRUNC)
该处理方法相当于把图像中比较亮(大于127,偏向于白色)的像素值处理为阈值。
4、阈值化为0
该方法先选定一个阈值,比如127。
(1) 大于等于阈值127的像素点,值保持不变
(2) 小于该阈值的像素点值设置为0
例如,163->163,86->0,102->0,201->201。
关键字为 cv2.THRESH_TOZERO
该算法把比较亮的部分不变,比较暗的部分处理为0。
r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TOZERO)
5、反阈值化为0
该方法先选定一个阈值,比如127。
(1) 大于等于阈值127的像素点变为0
(2) 小于该阈值的像素点值保持不变
例如,163->0,86->86,102->102,201->0。
关键字为 cv2.THRESH_TOZERO_INV
r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TOZERO_INV)
最后五个算法对比一下
6、图像腐蚀
形态学转换主要针对的是二值图像(0或1)。图像腐蚀类似于“领域被蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小。其主要包括两个输入对象:
(1)二值图像
(2)卷积核
卷积核是腐蚀中的关键数组,采用numpy库可以生成。
图像腐蚀主要使用的函数为erode,其原型如下:
dst = cv2.erode(src, kernel, iterations)
参数dst表示处理的结果,src表示原图像,kernel表示卷积核,iterations表示迭代次数。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。
#设置卷积核
kernel = np.ones((5,5), np.uint8)
#图像腐蚀处理
erosion = cv2.erode(src, kernel)
6、图像膨胀
图像膨胀是腐蚀操作的逆操作,类似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大,线条变粗了,主要用于去噪。
(1) 图像被腐蚀后,去除了噪声,但是会压缩图像。
(2) 对腐蚀过的图像,进行膨胀处理,可以去除噪声,并且保持原有形状。
图像膨胀主要使用的函数为dilate,其原型如下:
dst = cv2.dilate(src, kernel, iterations)
参数dst表示处理的结果,src表示原图像,kernel表示卷积核,iterations表示迭代次数。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。
erosion = cv2.dilate(src, kernel)
the end