opencv形态学操作

腐蚀:前景物边界腐蚀,卷积核对应的原图像所有像素值为都是1那中心元素保持原来像素值,否则置零

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

img=cv2.imread('E:/python/sunflower.png',0)
kernel=np.ones((5,5),np.uint8)
dst=cv2.erode(img,kernel,iterations=7)
plt.subplot(121),plt.imshow(img,'gray')
plt.subplot(122),plt.imshow(dst,'gray')

opencv形态学操作_第1张图片
膨胀:前景物边界膨胀,卷积核对应的原图像所有像素值为有1那中心元素保持原来像素值,否则置零,增加白色区域
dst=cv2.dilate(img,kernel,iterations=1)

opencv形态学操作_第2张图片
开运算:先腐蚀再膨胀,可以消除噪声

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

闭运算:先膨胀再腐蚀,可以填充孔洞或者小黑点

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

opencv形态学操作_第3张图片
形态学梯度:一幅图像膨胀与腐蚀差,看上去类似前景物轮廓

dst=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)

opencv形态学操作_第4张图片
礼帽:原始图像与进行开运算之后的图像差

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

opencv形态学操作_第5张图片
黑帽:闭运算与原始图像之差

dst=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)

opencv形态学操作_第6张图片

结构化元素

A=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
print(A)

[[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]]

A=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
print(A)

[[0 0 1 0 0]
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
[0 0 1 0 0]]

A=cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
print(A)

[[0 0 1 0 0]
[0 0 1 0 0]
[1 1 1 1 1]
[0 0 1 0 0]
[0 0 1 0 0]]

你可能感兴趣的:(python)