1.图像的二值化
所谓阈值处理,就是给定一个阈值,当像素值比指定阈值大或小时做相关的操作。对应的API为:cv2.threshold(src,thresh,maxval,type,dst=None),几种type的作用:
cv2.THRESH_BINARY:若像素值大于阈值,则置为maxval;否则置0
cv2.THRESH_BINARY_INV:THRESH_BINARY的反转
cv2.THRESH_TRUNC:若像素值大于阈值,则置为阈值;否则不变
cv2.THRESH_TOZERO:小于阈值的部分置为0;其他不变
cv2.THRESH_TOZERO_INV:THRESH_TOZERO的反转
import cv2
import numpy
img = cv2.imread('dog.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#图像二值化,返回两个值,小于200的数值为0,大于200的数值为255
ret,img_binary = cv2.threshold(img_gray, 200,255, cv2.THRESH_BINARY)
cv2.imshow('binary',img_binary)
cv2.imshow('gray',img_gray)
2.腐蚀操作
如右图,原图像和一个5X5的卷积核进行卷积,当卷积核内所有像素均为黑色像素时,卷积后的图像的中心点像素才为黑像素。图像经过腐蚀之后,边缘像素向内收缩。 erode(img,ksize,iterations = 1) iterations表示腐蚀的次数
kernel = np.ones((5,5),np.uint8)
img_erode = cv2.erode(img,kernel,iterations=3)
3.膨胀操作
腐蚀对应的是膨胀,只要卷积核中间点像素不为0,则3x3的卷积核上的所有像素都不为0.
#膨胀
kernel = np.ones((5,5),np.uint8)
img_dilate = cv2.dilate(img,kernel,iterations=1)
腐蚀和膨胀如果用的是白底黑字,则效果刚好相反
开运算:腐蚀+膨胀(顺序不能搞反)!!!!
图像经过开运算后,胡椒噪点被抹去。
#开运算
img_morphology = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
闭运算:膨胀+腐蚀(顺序不能搞反)!!!!
闭运算是消除图像内的噪点
4.形态图梯度
原图-腐蚀,得到的是图像的边缘,就像是用笔把边缘重新描摹了一下,而中间的像素被删掉了
5.顶帽运算
原图 - 开运算
去除大的白块,留下小的白块
#顶帽运算
img_hat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
6.黑帽运算
原图 - 闭运算
保留图片内部的噪点
#黑帽运算
img_blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)