自定义opencv腐蚀,膨胀函数

目录

内容:

形态学应用场景:

腐蚀操作:

膨胀操作:

自定义函数实现腐蚀和膨胀操作:

内容:

  • 形态学的操作:腐蚀,膨胀概念。
  • 形态学操作腐蚀膨胀的作用。
  • 形态学腐蚀,膨胀的源代码实现

形态学应用场景:

  • 去除干扰噪声

  • 边界提取

  • 目标定位

  • 区域填充


腐蚀操作:

概念:

通过使用特定的结构元素来侵蚀图像。

定义:

自定义opencv腐蚀,膨胀函数_第1张图片

形态学腐蚀的作用:

  1. 它能够将图像的边界点消除,使图像沿着边界向内收缩,
  2. 将小于指定结构体元素的部分去除。
  3. 腐蚀用来“收缩”或者“细化”二值图像。

opencv自带函数erode函数:

官网:

自定义opencv腐蚀,膨胀函数_第2张图片

 参数解释:

src 输入图像;通道的数量可以是任意的,但深度应该是CV_8U、CV_16U等。
dst 输出与输入图像大小类型相同的图像。
kernel 用于侵蚀的结构元件;如果,则使用矩形结构元素。内核可以使用getStructureElement创建。
anchor 锚点在元素中的位置;默认值 (-1, -1) 表示定位点位于元素中心。
iterations 腐蚀的次数
borderType 像素外推方法,
borderValue 常量边框情况下的边框值

代码:

erosion = cv2.erode(img,kernel,iterations = 1)    # 腐蚀函数

膨胀操作:

概念:

通过使用特定的结构元素来扩展图像。

定义:

形态学膨胀的作用:

  1. 桥接裂缝,恢复图像中断续的连通性。
  2. 使图像变胖。

opencv自带函数:

官网dilate函数:

自定义opencv腐蚀,膨胀函数_第3张图片

 参数解释:

src 输入图像;通道的数量可以是任意的,但深度应该是CV_8U、CV_16U等。
dst 输出与输入图像大小类型相同的图像。
kernel 用于膨胀的结构元件;如果,则使用矩形结构元素。内核可以使用getStructureElement创建。
anchor 锚点在元素中的位置;默认值 (-1, -1) 表示定位点位于元素中心。
iterations 膨胀的次数
borderType 像素外推方法,
borderValue 常量边框情况下的边框值

代码:

dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1)   # 膨胀函数

自定义函数实现腐蚀和膨胀操作:

  • 注意这个函数是进行的3*3的核,其他的核需要在tmp[y-1:y+2, x-1:x+2]进行更改
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,   输入的图像
  • kernel,  用于操作的结构元件;如果,则使用矩形结构元素。内核可以使用getStructureElement创建。
  • Iterations=1,膨胀的次数
  • method="erode",进行形态学的方法,erode或者dilate

运行代码:

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()

 效果展示:

自定义opencv腐蚀,膨胀函数_第4张图片

 

你可能感兴趣的:(opencv,python,opencv)