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

OpenCV形态学操作实战:10个工业视觉必用操作

OpenCV形态学操作实战:10个工业视觉必用操作(含代码)适合人群:正在做工业视觉预处理、图像分割、缺陷检测的工程师阅读时间:约12分钟代码环境:Python 3.8+,OpenCV 4.x前言形态学操作是工业视觉中最朴实也最高频的工具。不需要GPU,不需要深度学习,几行代码就能解决:噪声太多,检测框乱跳 →腐蚀目标断开,识别成多个 →膨胀孔洞填不上,面积计算错 →闭运算背景粘连,分割不开 →开运算本文整理了工业视觉中最常用的10个形态学操作,每个都给你实际用途和可直接运行的代码。基础:形态学操作的核心概念所有形态学操作都基于两个要素:原始图像(必须是二值图或灰度图)+结构元素(kernel)。importcv2importnumpyasnpimportmatplotlib.pyplotaspltdefshow_result(original,processed,title):"""通用显示函数"""fig,axes=plt.subplots(1,2,figsize=(10,4))axes[0].imshow(original,cmap='gray')axes[0].set_title("原图")axes[0].axis('off')axes[1].imshow(processed,cmap='gray')axes[1].set_title(title)axes[1].axis('off')plt.tight_layout()plt.show()# 常用结构元素kernel_3x3=cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))kernel_5x5=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))kernel_ellipse=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(7,7))kernel_cross=cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))操作1:腐蚀(Erosion)作用:收缩前景区域,消除小噪点,分离粘连物体工业场景:去除二值图中的椒盐噪声、缩小过度膨胀的检测区域importcv2importnumpyasnpdefmorphology_erosion_demo(image_path):""" 腐蚀操作 - 去除小噪点 """img=cv2.imread(image_path,cv2.IMREAD_GRAYSCALE)_,binary=cv2.threshold(img,127,255,cv2.THRESH_BINARY)# 腐蚀:kernel越大,腐蚀越强kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))eroded=cv2.erode(binary,kernel,iterations=1)# 统计变化original_pixels=np.sum(binary0)eroded_pixels=np.sum(eroded0)print(f"腐蚀前白色像素:{original_pixels}")print(f"腐蚀后白色像素:{eroded_pixels}")print(f"减少:{original_pixels-eroded_pixels}像素")returneroded# 实际应用:去除PCB检测中的焊点噪声defremove_noise_by_erosion(binary_img,noise_size=2):"""去除小于noise_size的孤立噪点"""kernel=np.ones((noise_size*2+1,noise_size*2+1),np.uint8)returncv2.erode(binary_img,kernel,iterations=1)关键参数:iterations:腐蚀次数,多次腐蚀等效于更大的kernelkernel形状:矩形用于规则物体,椭圆用于圆形物体,十字用于细长结构操作2:膨胀(Dilation)作用:扩张前景区域,填充小孔洞,连接断开区域工业场景:连接裂纹检测中的断点,加粗细线目标便于后续处理defmorphology_dilation_demo(binary_img):""" 膨胀操作 - 连接断裂区域 工业场景:连接断裂的裂纹线 """kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))dilated=cv2.dilate(binary_img,kernel,iterations=1)returndilateddefconnect_broken_cracks(binary_img):""" 专为裂纹检测设计的膨胀策略 裂纹通常是细长的,用横向kernel效果更好 """# 横向kernel优先连接水平方向的断裂h_kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(15,1))# 纵向kernel连接垂直方向的断裂v_kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(1,15))h_dilated=cv2.dilate(binary_img,h_kernel)v_dilated=cv2.dilate(binary_img,v_kernel)# 合并两个方向的结果combined=cv2.bitwise_or(h_dilated
http://www.zskr.cn/news/1403128.html

相关文章:

  • 私有化 AI 搭建:OpenClaw 配置 Ollama 本地大模型(避坑 + 排错)docs.openclaw.ai
  • 国家中小学智慧教育平台电子课本下载:tchMaterial-parser工具5分钟快速获取PDF指南
  • 书匠策AI到底是什么黑科技?拆开给你看,毕业论文原来可以这样“偷懒“!
  • FSearch:Linux系统文件搜索的革命性解决方案,3秒定位任何文件
  • 能源互联网统一接入平台:CPS理念下的设备协同与智能管理实践
  • 思维跃迁:从二维平面到三维想象的创作解放
  • 拆解100篇AI高引用内容后,我发现了GEO的3个隐藏规律(附完整数据)
  • 初创公司如何利用多模型聚合能力低成本构建AI产品原型
  • Windows启动 Java 项目并自定义进程名(修改 Java 可执行文件名称实现)
  • 如何在资源受限的ESP32上实现车牌识别?探索Arduino-ESP32的边缘计算架构
  • 第12周学习笔记
  • Crimson字体:免费开源的专业级衬线字体完整指南
  • 长沙天虹提货券回收全攻略,长沙人手一张的闲置券,这么换钱不踩坑 - 京顺回收
  • GPU性能优化新思路:协同Warp调度与局部性保护缓存分配
  • 基于FPGA实现分组显示协议:突破传统固定帧率限制的高效显示架构
  • Ryujinx模拟器存档管理终极指南:如何安全备份你的Switch游戏进度
  • 彻底解决Mac存储空间不足:Pearcleaner智能清理工具使用全指南
  • Galanin (human) ;GWTLSAGYLLGPHA VGNHRSFSDKNGLTS
  • 2026年4月热收缩膜封切机企业找哪家,称重包装机/果干包装机/热收缩膜封切机,热收缩膜封切机直销厂家有哪些 - 品牌推荐师
  • 【独家首发】ChatGPT用户行为追踪白皮书(基于12,847名实测用户+眼动+日志双模数据)
  • 5分钟搞定缠论分析:ChanlunX让你的技术分析变得如此简单
  • 紧急通知!京东618第二波红包已开启,淘宝618第二波红包今夜0点重磅接力!今晚8点大额加码翻倍全攻略 - 资讯焦点
  • 如何高效管理软件授权:智能激活方案完全指南
  • 动态目标跨镜无缝接力追踪技术——危化品应急处置轨迹溯源场景中的空间智能应用白皮书
  • 基于直流母线电容的虚拟惯量技术:原理、设计与工程实践
  • 动态目标跨镜无缝接力追踪技术——仓储货物装卸区域安全追踪场景中的空间智能应用白皮书
  • Ryujinx存档备份终极指南:如何永久保护你的Switch游戏进度
  • 告别手动转发:5分钟学会微信群消息自动同步
  • 低内存离散小波变换算法SMFrWF:WMSN/IoT图像处理的内存与计算权衡
  • Unity新手必看:用Kawaii Tank资源包快速搞定你的第一个坦克射击游戏(附完整代码)