python+opencv形态学处理
环境vscode下的python3.7
opencv形态学处理学习笔记
1、显示原图(读成灰度图)
img = cv2.imread("c:\\Users\\Administrator\\Desktop\\123\\rose.jpg",cv2.IMREAD_GRAYSCALE) cv2.imshow('img',img) cv2.waitKey(0) cv2.destroyAllWindows()
2、腐蚀操作
原理:白色像素值为255,黑色像素值为0,与0相乘为零导致越来越多像素变为0,逐渐被黑色腐蚀。
#腐蚀操作(矩阵卷积) #矩阵大小平均和 (3,3)核大小,全为一的矩阵 kernel =np.ones((3,3),np.uint8) #interation表示次数 erosion = cv2.erode(img,kernel,iterations = 1) cv2.imshow('erosion',erosion) cv2.waitKey(0) cv2.destroyAllWindows()
将iteration改成3,核大小为(3,3)
将核大小改成(6,6),iteration为1
3、膨胀操作,与腐蚀操作可理解为逆操作
#膨胀操作 #可以理解为腐蚀的逆操作 dilate = cv2.dilate(img,kernel,iterations = 1) cv2.imshow('dilate',dilate) cv2.waitKey(0) cv2.destroyAllWindows()
通过上面的一对操作组合运算得到的操作
4、开运算
#开运算 先腐蚀,再膨胀 opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel) cv2.imshow('opening',opening) cv2.waitKey(0) cv2.destroyAllWindows()
开运算用途:用于除毛刺、孤立的小点,类似一个滤波器。消除白色小物体。
5、闭运算
#闭运算 先膨胀,再腐蚀 closeing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel) cv2.imshow('closeing',closeing) cv2.waitKey(0) cv2.destroyAllWindows()
闭运算用途:消除黑色小区域(小型黑洞),黑色毛刺等等。
6、梯度运算
#梯度运算 #梯度=膨胀-腐蚀 gradient = cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel) cv2.imshow('gradient',gradient) cv2.waitKey(0) cv2.destroyAllWindows()
梯度主要是为了得到边缘信息。
7、顶帽
#顶帽 = 原始输入-开运算结果 tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel) cv2.imshow('tophat',tophat) cv2.waitKey(0) cv2.destroyAllWindows()
用原始图像减去开运算(消除白色小区域),得到白色小区域及边缘,突出白色区域(较亮的区域)。
8、黑帽
#黑帽 = 闭运算-原始输入 blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel) cv2.imshow('blackhat',blackhat) cv2.waitKey(0) cv2.destroyAllWindows()
用原始图减去闭运算结果(白色小区域),突出黑色小区域(暗色部分)。