形态学图像处理
形态学图像处理
图像腐蚀和膨胀
腐蚀和膨胀是对二值图像的白色部分(高亮部分)而言的,不是黑色部分而言。
腐蚀就是原图中的高亮部分被腐蚀即“领域被蚕食”,效果图拥有比原图更小的高亮区域。
膨胀就是图像中的高亮部分进行膨胀即“领域扩张”,效果图拥有比原图更大的高亮区域。
按数学方面来说,膨胀或者腐蚀操作就是将图像(或图像的一部分区域,我们称之为A)与核(我们称之为B)进行卷积。
•腐蚀
cv2.erode(img,kernel,iterations=1)参数
img指要进行处理的二值图像
kernel是核的大小
iterations是指要进行腐蚀的次数import cv2 import numpy as np def cv_show(name,img): cv2.imshow(name,img) cv2.waitKey(0) cv2.destroyAllWindows() img = cv2.imread('pic.png') kernel = np.ones((3,3),np.uint8) erode = cv2.erode(img,kernel,iterations=1) res = np.hstack((img,erode)) cv_show('res',res)pie = cv2.imread('pie.png') cv_show('img',pie) kernel = np.ones((30,30),np.uint8) erosion_1 = cv2.erode(pie,kernel,iterations=1) erosion_2 = cv2.erode(pie,kernel,iterations=2) res = np.hstack((img,erosion_1,erosion_2)) cv_show('img',res)•膨胀
膨胀跟腐蚀对偶
img = cv2.imread('pic.png') kernel = np.ones((3,3),np.uint8) dilate = cv2.dilate(img,kernel,iterations=1) res = np.hstack((img,dilate)) cv_show('res',res)pie = cv2.imread('pie.png') cv_show('img',pie) kernel = np.ones((30,30),np.uint8) erosion_1 = cv2.dilate(pie,kernel,iterations=1) erosion_2 = cv2.dilate(pie,kernel,iterations=2) res = np.hstack((pie,erosion_1,erosion_2)) cv_show('img',res)
开运算和闭运算
• 开运算
开运算是图像先腐蚀后膨胀
img = cv2.imread('pic.png') kernel = np.ones((5,5),np.uint8) opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel) cv_show('img',opening)• 闭运算
闭运算是图像先膨胀后腐蚀
img = cv2.imread('pic.png') kernel = np.ones((5,5),np.uint8) closeing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel) cv_show('img',closeing)
梯度运算
梯度运算是(膨胀-腐蚀)
pie = cv2.imread('pie.png') kernel = np.ones((7,7),np.uint8) gradient = cv2.morphologyEx(pie,cv2.MORPH_GRADIENT,kernel) cv_show('img',gradient)
礼帽和黑帽
• 礼帽
礼帽是原始输入-开运算
img = cv2.imread('dige.png') tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel) res = np.hstack((img,tophat)) cv_show('res',res)• 黑帽
黑帽是闭运算-原始输入
img = cv2.imread('dige.png') blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel) res = np.hstack((img,blackhat)) cv_show('res',res)