当前位置: 首页 > news >正文

OpenCV:开运算

目录

1. 简述

2. 用腐蚀和膨胀实现开运算

2.1 代码示例

2.2 运行结果

3. 开运算接口

3.1 参数详解

3.2 代码示例

3.3 运行结果

4. 开运算应用场景

5. 注意事项

6. 总结


相关阅读

OpenCV:图像的腐蚀与膨胀-CSDN博客

OpenCV:闭运算-CSDN博客


1. 简述

简而言之:开运算 = 腐蚀 + 膨胀

开运算 是一种形态学操作,通常用于去除图像中的小噪点,同时保留较大的前景物体。
它的操作顺序是:

  1. 先对图像进行 腐蚀,去除细小的噪点和瑕疵。
  2. 再进行 膨胀,恢复被腐蚀的前景物体形状。

开运算的主要作用是:

  • 去除噪声(尤其是白色背景下的黑色小物体)。
  • 平滑前景物体的边缘。

开运算的数学表达式为:

A\bigcirc B = \left ( A \ominus B \right ) \oplus B

其中:

  • A 是输入图像。
  • B 是卷积核。
  • ⊖ 表示腐蚀操作。
  • ⊕ 表示膨胀操作。

2. 用腐蚀和膨胀实现开运算

2.1 代码示例

import cv2
import numpy as npimage = cv2.imread('D:\\resource\\filter\\q3.jpg')# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))# 腐蚀操作
result1 = cv2.erode(image, kernel, iterations=1)# 膨胀操作
result2 = cv2.dilate(result1, kernel, iterations=1)# 显示原始图像、开运算(腐蚀 + 膨胀)图像
cv2.imshow('image', image)
cv2.imshow('result2', result2)cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 运行结果

从左到右:

  • 原始黑底白字图像,带一些白色的噪点。
  • 图像腐蚀和膨胀之后的结果,白色噪点消失。 

3. 开运算接口

在 OpenCV 中,开运算由函数 cv2.morphologyEx() 实现,其关键参数如下:

cv2.morphologyEx(src, op, kernel, dst=None, anchor=(-1, -1), iterations=1, borderType=cv2.BORDER_CONSTANT, borderValue=0)

3.1 参数详解

  • src:输入图像。通常是二值化图像或灰度图像。
  • op:操作类型,开运算的标识符为 cv2.MORPH_OPEN。
  • kernel:结构元素(卷积核)。决定形态学操作的邻域范围和形状。可以使用 cv2.getStructuringElement() 创建。
  • dst:输出图像。默认为 None。
  • anchor:结构元素的锚点,默认为 (-1, -1),即以核的中心为锚点。
  • iterations:操作的迭代次数,默认为 1。
  • borderType:边界模式,定义图像边界的填充方式,常用 cv2.BORDER_CONSTANT。
  • borderValue:边界值,仅在 borderType 为 cv2.BORDER_CONSTANT 时使用。

常用的参数为前3个:

cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

    3.2 代码示例

    import cv2
    import numpy as npimage = cv2.imread('D:\\resource\\filter\\q3.jpg')# 卷积核
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))# 腐蚀操作
    #result1 = cv2.erode(image, kernel, iterations=1)# 膨胀操作
    #result2 = cv2.dilate(result1, kernel, iterations=1)# 开运算
    result2 = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)# 显示原始图像、开运算(腐蚀 + 膨胀)图像
    cv2.imshow('image', image)
    cv2.imshow('result2', result2)cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    3.3 运行结果

    结果与2.2一致。


    4. 开运算应用场景

    • 去除小噪点:在二值化图像中,小的孤立噪声点可以通过开运算清除。
    • 提取连通区域:对于连通区域的检测,开运算可以去掉孤立的小物体,仅保留目标区域。
    • 平滑边缘:通过开运算,前景物体的边缘可以更加平滑。

    5. 注意事项

    • 核的大小与形状:卷积核的大小直接影响结果。核过大会过度去除图像细节,核过小则可能无法有效去除噪声。
    • 输入图像类型:开运算适用于二值化或灰度图像,对于彩色图像需先转换。
    • 多次操作:对于复杂噪声,可能需要多次开运算,或调整核的大小与形状。

     6. 总结

    开运算是图像形态学中的基本操作,用于去除小噪点、平滑边缘等。OpenCV 提供了功能强大的接口 cv2.morphologyEx(),可以灵活实现开运算及其他形态学操作。通过选择合适的卷积核,可以在实际项目中轻松应对各种图像处理问题。

    http://www.lryc.cn/news/529902.html

    相关文章:

  1. 38. RTC实验
  2. Flutter 新春第一弹,Dart 宏功能推进暂停,后续专注定制数据处理支持
  3. 巴菲特价值投资思想的核心原则
  4. C 或 C++ 中用于表示常量的后缀:1ULL
  5. vue3中el-input无法获得焦点的问题
  6. 程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<3>
  7. (三)QT——信号与槽机制——计数器程序
  8. Qt 5.14.2 学习记录 —— 이십이 QSS
  9. Hot100之哈希
  10. 油漆面积——蓝桥杯
  11. 深度解析:网站快速收录与服务器性能的关系
  12. 925.长按键入
  13. JavaScript 中的 var 和 let :关键区别与使用建议
  14. 寒假刷题Day19
  15. 写好简历的三个关键认知
  16. 工具的应用——安装copilot
  17. Koa 基础篇(二)—— 路由与中间件
  18. 帆软 FCA -业务分析师认证学习
  19. Miniconda 安装及使用
  20. solidity高阶 -- Eth支付
  21. 深入理解Java中的String
  22. 洛谷 P1734 最大约数和 C语言
  23. Golang 执行流程分析
  24. python学opencv|读取图像(五十一)使用修改图像像素点上BGR值实现图像覆盖效果
  25. Flask数据的增删改查(CRUD)_flask删除数据自动更新
  26. kamailio-ACC模块介绍【kamailio6.0. X】
  27. 数据库对象
  28. EtherCAT主站IGH-- 27 -- IGH之globals.h文件解析
  29. 2025多目标优化创新路径汇总
  30. 15JavaWeb——Maven高级篇