当前位置:   article > 正文

Opencv基础操作-腐蚀操作-膨胀操作_opencv 膨胀

opencv 膨胀

腐蚀操作

腐蚀操作原理(使价值信息越来越少)

初始化一个核(初始化大小和尺寸),类似于一个滑动窗口,在目标图像上面进行遍历,若这个窗口内图像的像素都大于或者都小于窗口元素(都为前景或者背景)则不进行操作,若不同,则将窗口内对应的图像像素进行腐蚀操作(将窗口内的图像元素替换为窗口内图像元素的最小值)。即若窗口内的图像像素相同,不进行操作,若不同,则将将窗口内的图像元素替换为窗口内图像像素的最小值。(腐蚀膨胀操作一般应用于灰度图或者二值图,所有最大值与最小值一般分别为1和0)

腐蚀操作的标准范式

# 定义腐蚀操作的结构元素
kernel = np.ones((3, 3), np.uint8)  # 可以调整结构元素的大小和形状

# 进行腐蚀操作
eroded_image = cv2.erode(image, kernel, iterations=1)
  • 1
  • 2
  • 3
  • 4
  • 5

初始化核的大小,越大一次性比较的区域越大,则一次迭代腐蚀的区域会越大,定义迭代次数,即对输入进行多少次腐蚀。

腐蚀前后结果对比

def read_img(img_path, mode=cv2.IMREAD_COLOR):
    """

    :param mode:
    :param img_path: 图像路径
    :return: array
    """
    return cv2.imread(img_path, mode)


def img_show(name, img):
    """

    :param name: 窗口名称
    :param img: 图像数据array
    """
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__ == '__main__':
    img_path_3 = '780.jpg'
    # 默认读取BGR
    image_3 = read_img(img_path_3)
    img_3 = cv2.resize(image_3, (224, 224))
    # 腐蚀操作
    kernel = np.zeros((5, 5), np.uint8)
    erosion = cv2.erode(img_3, kernel, iterations=1)
    result = np.hstack((img_3, erosion))
    img_show('==', result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

结果:
在这里插入图片描述


不同腐蚀次数结果对比

def read_img(img_path, mode=cv2.IMREAD_COLOR):
    """

    :param mode:
    :param img_path: 图像路径
    :return: array
    """
    return cv2.imread(img_path, mode)


def img_show(name, img):
    """

    :param name: 窗口名称
    :param img: 图像数据array
    """
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__ == '__main__':
    img_path_3 = '780.jpg'
    # 默认读取BGR
    image_3 = read_img(img_path_3)
    img_3 = cv2.resize(image_3, (224, 224))
    # 腐蚀操作
    kernel = np.zeros((5, 5), np.uint8)
    erosion_1 = cv2.erode(img_3, kernel, iterations=1)
    erosion_2 = cv2.erode(img_3, kernel, iterations=2)
    erosion_3 = cv2.erode(img_3, kernel, iterations=3)
    result = np.vstack((erosion_1, erosion_2, erosion_3))
    img_show('--', result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

在这里插入图片描述
迭代次数越多,腐蚀程度越大,迭代次数在一定程度上等效于窗口大小


膨胀操作

膨胀操作原理(腐蚀的逆操作)

初始化一个核(初始化大小和尺寸),类似于一个滑动窗口,在目标图像上面进行遍历,若这个窗口内图像的像素都大于或者都小于窗口元素(都为前景或者背景)则不进行操作,若不同,则将窗口内对应的图像像素进行膨胀操作(将窗口内的图像元素替换为窗口内图像元素的最大值)。即若窗口内的图像像素相同,不进行操作,若不同,则将将窗口内的图像元素替换为窗口内图像像素的最大值.(腐蚀膨胀操作一般应用于灰度图或者二值图,所有最大值与最小值一般分别为1和0)

标准范式

    kernel = np.ones((5, 5), np.uint8)
    erosion = cv2.dilate(img_3, kernel, iterations=1)
  • 1
  • 2

样例

def read_img(img_path, mode=cv2.IMREAD_COLOR):
    """

    :param mode:
    :param img_path: 图像路径
    :return: array
    """
    return cv2.imread(img_path, mode)


def img_show(name, img):
    """

    :param name: 窗口名称
    :param img: 图像数据array
    """
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__ == '__main__':
    img_path_3 = '780.jpg'
    # 默认读取BGR
    image_3 = read_img(img_path_3)
    img_3 = cv2.resize(image_3, (224, 224))
    # 随机生成噪声数据
    noise = np.random.normal(0, 1, img_1.shape).astype(np.uint8)
    # 腐蚀操作
    kernel = np.ones((5, 5), np.uint8)
    erosion = cv2.dilate(img_3, kernel, iterations=1)
    result = np.hstack((img_3, erosion))
    img_show('==', result)

    erosion_1 = cv2.dilate(img_3, kernel, iterations=1)
    erosion_2 = cv2.dilate(img_3, kernel, iterations=2)
    erosion_3 = cv2.dilate(img_3, kernel, iterations=3)
    result = np.vstack((erosion_1, erosion_2, erosion_3))
    img_show('--', result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

膨胀一次
在这里插入图片描述
膨胀多次
在这里插入图片描述

总结

图像选的不太合适呀,对于膨胀和腐蚀原理的解释和官方的不太一致,是我自己的理解。总得来说,腐蚀/膨胀操作就是通过一个滑动窗口,若滑动窗口内图像的元素不完全一致,则执行膨胀或者腐蚀,将窗口内图像的像素置为前景或者背景,一般应用于灰度图和二值图

若理解有误,欢迎大家指正

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/773555
推荐阅读
相关标签
  

闽ICP备14008679号