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()

    

  用原始图减去闭运算结果(白色小区域),突出黑色小区域(暗色部分)。

原文地址:https://www.cnblogs.com/oldhuang/p/12115333.html