OpenCV中的图像形态学转换

两个基本的形态学操作是腐蚀和膨胀。他们的变化构成了开运算,闭运算,梯度等。下面以这张图为例

1.腐蚀

这个操作会把前景物体的边界腐蚀掉。

 1 import cv2
 2 import numpy as np
 3 
 4 img = cv2.imread('D:/Test/j.png',0)
 5 kernel = np.ones((5,5),np.uint8)
 6 erosion = cv2.erode(img,kernel,iterations = 1)
 7 cv2.imshow('img',img)
 8 cv2.imshow('result',erosion)
 9 cv2.waitKey(0)
10 cv2.destroyAllWindows()

 

左边是腐蚀之后的图像,右边是原图像。

2.膨胀

 1 import cv2
 2 import numpy as np
 3 
 4 img = cv2.imread('D:/Test/j.png',0)
 5 kernel = np.ones((5,5),np.uint8)
 6 dilation = cv2.dilate(img,kernel,iterations = 1)
 7 cv2.imshow('img',img)
 8 cv2.imshow('result',dilation)
 9 cv2.waitKey(0)
10 cv2.destroyAllWindows()

左边是膨胀之后的图像,右边是原图像。

3.开运算

先进性腐蚀再进行膨胀就叫做开运算,它被用来去除噪声。这里我们用到的函数是 cv2.morphologyEx()。

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

4.闭运算

先膨胀再腐蚀。它经常被用来填充前景物体中的小洞,或者前景物体上的小黑点。

closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

 

 5. 形态学梯度

  其实就是一幅图像膨胀与腐蚀的差别。结果看上去就像前景物体的轮廓。

1 import cv2
2 import numpy as np
3 img = cv2.imread('D:/Test/j.png',0)
4 kernel = np.ones((5,5),np.uint8)
5 gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
6 cv2.imshow('img',img)
7 cv2.imshow('result',gradient)
8 cv2.waitKey(0)
9 cv2.destroyAllWindows()

左边是梯度之后的图像,右边是原图像。

6.礼帽

原始图像与进行开运算之后得到的图像的差。

1 import cv2
2 import numpy as np
3 img = cv2.imread('D:/Test/j.png',0)
4 kernel = np.ones((5,5),np.uint8)
5 tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
6 cv2.imshow('img',img) 
7 cv2.imshow('result',tophat) 
8 cv2.waitKey(0) 
9 cv2.destroyAllWindows()

结果:

7.黑帽

进行闭运算之后得到的图像与原始图像的差。

tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

 

posted @ 2019-01-24 17:19  小雨点1206  Views(272)  Comments(0Edit  收藏  举报