一、形态学——腐蚀操作 (缩小、变细)
import cv2 import numpy as npimg_pig = cv2.imread('pig.png') cv2.imshow('image_pig',img_pig) cv2.waitKey(0) cv2.destroyAllWindows()def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)cv2.destroyAllWindows()# 腐蚀的核是5*5大小的 kernel = np.ones((5,5),np.uint8) erosion1 = cv2.erode(img_pig,kernel,iterations=2) erosion2 = cv2.erode(img_pig,kernel,iterations=4) erosion3 = cv2.erode(img_pig,kernel,iterations=6) res = np.hstack((erosion1,erosion2,erosion3)) cv_show('pig', res)
结果:
二、膨胀操作(扩大,变粗)
kernel = np.ones((3,3),np.uint8) dilate_1 = cv2.dilate(img_pig,kernel,iterations=1) dilate_2 = cv2.dilate(img_pig,kernel,iterations=3) dilate_3 = cv2.dilate(img_pig,kernel,iterations=5) res = np.hstack((dilate_1,dilate_2,dilate_3)) cv_show('pig_1', res)
结果:
三、开运算(先腐蚀,后膨胀 不带刺)
kernel = np.ones((30,30),np.uint8) opening = cv2.morphologyEx(img_pig, cv2.MORPH_OPEN, kernel) cv_show("opening", opening)
结果:
四、闭运算(先膨胀,后腐蚀 刺变大,并且腐蚀不掉)
kernel = np.ones((30,30),np.uint8) closing = cv2.morphologyEx(img_pig,cv2.MORPH_CLOSE,kernel) cv_show("closing", closing)
结果:
五、梯度运算(梯度 = 膨胀——腐蚀)
kernel = np.ones((10,10),np.uint8) dilate_1 = cv2.dilate(img_pig,kernel,iterations=5) erosion1 = cv2.erode(img_pig,kernel,iterations=5) gradient = cv2.morphologyEx(img_pig, cv2.MORPH_GRADIENT,kernel) cv_show('tidu', gradient)
结果:
六、礼貌与黑帽(原始输入-开运算结果:执行结果,只有刺)
tophat = cv2.morphologyEx(img_pig, cv2.MORPH_TOPHAT,kernel) cv_show('tophat', tophat)
结果:
七、黑帽(没有刺,只剩下轮廓)
blackhat = cv2.morphologyEx(img_pig, cv2.MORPH_BLACKHAT,kernel) cv_show('blackhat', blackhat)
结果:
对图像的处理当中,值得注意的是,在代码中设置合适的核的大小,以及迭代次数的多少,对图像的处理结果是有重要的影响的,所以在处理图像时,需要根据所需要的要求来对=代码参数做出合理的调整。