当前位置: 代码网 > it编程>软件设计>算法 > OpenCV基础操作-开运算与闭运算-梯度运算

OpenCV基础操作-开运算与闭运算-梯度运算

2024年08月03日 算法 我要评论
在OpenCV中,开运算(Opening)和闭运算(Closing)都是图像形态学的操作,它们经常与腐蚀和膨胀操作结合使用,用于图像处理和分析中的一些任务,如去噪、平滑、边缘检测等。开运算(Opening)操作的定义为先对图像进行腐蚀操作,再对腐蚀后的图像进行膨胀操作。开运算可以消除图像中的小且细小的噪点,同时保持主要对象的形状和结构。闭运算(Closing)操作的定义为先对图像进行膨胀操作,再对膨胀后的图像进行腐蚀操作。先进行膨胀操作,再进行腐蚀操作,梯度运算的结果为:膨胀操作结果-腐蚀操作结果。

开运算与闭运算

在opencv中,开运算(opening)和闭运算(closing)都是图像形态学的操作,它们经常与腐蚀和膨胀操作结合使用,用于图像处理和分析中的一些任务,如去噪、平滑、边缘检测等。

  • 开运算(opening)操作的定义为先对图像进行腐蚀操作,再对腐蚀后的图像进行膨胀操作。开运算可以消除图像中的小且细小的噪点,同时保持主要对象的形状和结构。

  • 闭运算(closing)操作的定义为先对图像进行膨胀操作,再对膨胀后的图像进行腐蚀操作。闭运算可以填充图像中的小孔洞,平滑图像边缘。

腐蚀和膨胀的原理和应用可以看上一篇博客:opencv基础操作-腐蚀操作-膨胀操作


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 = 'test_img.png'
    # 默认读取bgr
    image_3 = read_img(img_path_3)
    img_3 = cv2.resize(image_3, (224, 224))
    # 定义结构元素(kernel)
    kernel = np.ones((5, 5), np.uint8)
    # 进行开运算
    opened_image = cv2.morphologyex(img_3, cv2.morph_open, kernel)
    # 进行闭运算
    closed_image = cv2.morphologyex(img_3, cv2.morph_close, kernel)
    x1 = np.hstack((img_3, opened_image))
    x2 = np.hstack((img_3, closed_image))
    img_show('--', x1)
    img_show('==', x2)
开运算结果(左图为运算前,右图为运算后)

在这里插入图片描述

闭运算结果(左图为运算前,右图为运算后)

在这里插入图片描述


梯度运算

直观理解
标准范式
    # 定义结构元素(kernel)
    kernel = np.ones((5, 5), np.uint8)
    gradient = cv2.morphologyex(img_3, cv2.morph_gradient, kernel)
结果

在这里插入图片描述


礼帽与黑帽

直观理解
  • 礼帽 = 原始输入 - 开运算结果
  • 黑帽 = 闭运算结果 - 原始输入
标准范式
    # 定义结构元素(kernel)
    kernel = np.ones((5, 5), np.uint8)
    tophat = cv2.morphologyex(img_3, cv2.morph_tophat, kernel)
    blackhat = cv2.morphologyex(img_3, cv2.morph_blackhat, kernel)
礼帽结果

在这里插入图片描述

黑帽结果

在这里插入图片描述


欢迎大家学习交流

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com