目录
内容:
形态学应用场景:
腐蚀操作:
膨胀操作:
自定义函数实现腐蚀和膨胀操作:
去除干扰噪声
边界提取
目标定位
区域填充
概念:
通过使用特定的结构元素来侵蚀图像。
定义:
形态学腐蚀的作用:
opencv自带函数erode函数:
官网:
参数解释:
src | 输入图像;通道的数量可以是任意的,但深度应该是CV_8U、CV_16U等。 |
dst | 输出与输入图像大小类型相同的图像。 |
kernel | 用于侵蚀的结构元件;如果,则使用矩形结构元素。内核可以使用getStructureElement创建。 |
anchor | 锚点在元素中的位置;默认值 (-1, -1) 表示定位点位于元素中心。 |
iterations | 腐蚀的次数 |
borderType | 像素外推方法, |
borderValue | 常量边框情况下的边框值 |
代码:
erosion = cv2.erode(img,kernel,iterations = 1) # 腐蚀函数
概念:
通过使用特定的结构元素来扩展图像。
定义:
形态学膨胀的作用:
opencv自带函数:
官网dilate函数:
参数解释:
src | 输入图像;通道的数量可以是任意的,但深度应该是CV_8U、CV_16U等。 |
dst | 输出与输入图像大小类型相同的图像。 |
kernel | 用于膨胀的结构元件;如果,则使用矩形结构元素。内核可以使用getStructureElement创建。 |
anchor | 锚点在元素中的位置;默认值 (-1, -1) 表示定位点位于元素中心。 |
iterations | 膨胀的次数 |
borderType | 像素外推方法, |
borderValue | 常量边框情况下的边框值 |
代码:
dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1) # 膨胀函数
def myfun(img,kernel,Iterations=1,method="erode"): # 图片 ,
H, W = img.shape
out = img.copy()
for i in range(Iterations):
tmp = np.pad(out, (1, 1), 'edge') # 添加0
for y in range(1, H):
for x in range(1, W):
if method=="erode":
if np.sum(kernel * tmp[y-1:y+2, x-1:x+2]) < 255*np.sum(kernel):
out[y, x] = 0
if method=="dilate":
if np.sum(kernel * tmp[y-1:y+2, x-1:x+2]) >= 255:
out[y, x] = 255
return out
输入参数:
运行代码:
img=cv2.imread("./img/1.png",0)# 读取原图像的灰度图
kernel = np.array(((0, 1, 0),
(1, 0, 0),
(0, 0, 0)), dtype=np.int)
erode_img=myfun(img,kernel,1,"erode") # 使用自定义的函数使用腐蚀
dilate_img=myfun(img,kernel,1,"dilate") # 使用自定义的函数使用膨胀操作
res = np.hstack((img,erode_img,dilate_img))
cv2.imshow("img",res)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果展示: