初识OpenCV-Python - 008: 形态转换

本节学习了图片的形态转换,即利用函数和图像的前景色和背景色去侵蚀或者扩张图像图形。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread(r'C:\root\learn\python\opencvTest\img\j_point.png')

#定义内核
kernel = np.ones((5,5),np.uint8)
'''
侵蚀图像:侵蚀前景物的边界(尽量使前景物的颜色为白色)
通过kernel滑动通过图像。原始图像中的一个像素只有在内核下所有的像素都是1才被认为时1,否则或被侵蚀(变成0)
''
erosion = cv2.erode(img,kernel, iterations=1)

'''
扩张图像:扩张前景物的边界。与侵蚀相反。如果内核滑动通过图像,只要有一个图像在内核作用下为1,则为1.
'''
dilation = cv2.dilate(img, kernel, iterations=1)


'''
opening先侵蚀在扩张。主要用于去除噪音
'''
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)


'''
closing:先扩张再侵蚀:用于消除前景物中的‘小洞’
'''
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)


'''
gradient:扩张图与侵蚀图之差。得到对象的轮廓
'''
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
#kernel = np.ones((20,20),np.uint8)

'''
tophat: 原图像与opening之差
'''
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

'''
blackhat: closing图像与原图像之差
'''
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT,kernel)


plt.subplot(241),plt.imshow(img),plt.title('Original')
plt.xticks([]),plt.yticks([])
plt.subplot(242),plt.imshow(erosion),plt.title('erosion')
plt.xticks([]),plt.yticks([])
plt.subplot(243),plt.imshow(dilation),plt.title('dilation')
plt.xticks([]),plt.yticks([])
plt.subplot(244),plt.imshow(opening),plt.title('opening')
plt.xticks([]),plt.yticks([])
plt.subplot(245),plt.imshow(closing),plt.title('closing')
plt.xticks([]),plt.yticks([])
plt.subplot(246),plt.imshow(gradient),plt.title('gradient')
plt.xticks([]),plt.yticks([])
plt.subplot(247),plt.imshow(tophat),plt.title('tophat')
plt.xticks([]),plt.yticks([])
plt.subplot(248),plt.imshow(blackhat),plt.title('blackhat')
plt.xticks([]),plt.yticks([])
plt.show()

猜你喜欢

转载自www.cnblogs.com/August2019/p/11840491.html
008
今日推荐