尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Vision pro 项目分享:Pcd板线路检测(与halcon比较)

Vision pro 项目分享:Pcd板线路检测(与halcon比较)
📅 发布时间:2026/6/20 4:47:21

摸鱼时偶然注意到halcon短短三行代码就能实现pcd板线路断路,短路检测,挑战用Vision pro复刻该项目

一.算法原理

参考halcon实现原理(效果图在最下方):

1.对图像进行灰度开运算和灰度闭运算,使用7x7的八角形结构元素。

2.使用动态阈值(dyn_threshold)将开运算和闭运算的结果进行比较,以分割出电路断线区域。

3.用红色显示检测到的断线区域。

*halcon *灰度开运算 gray_opening_shape (Image, ImageOpening, 7, 7, 'octagon') *灰度闭运算 gray_closing_shape (Image, ImageClosing, 7, 7, 'octagon') *局部阈值分割电路断线 dyn_threshold (ImageOpening, ImageClosing, RegionDynThresh, 75, 'not_equal') *dev_display (RegionDynThresh)

总结原理就是正常线路在形态学处理前后变化不大,而有缺陷的线路会产生显著差异,接下来用vp挑战。

二.工具配置

主要工具选择如下:

1.用PixelMapTool预处理图像(加强黑白分明)简单处理

2.单图像处理只用了灰度形态调整5x5(测试效果比较好)

3.用CogIPTwoImageSubtractTool计算两个图像的差异,然后对差异图像进行阈值处理。(溢位模式选择绝对值)

4.利用斑点分析工具对差异图像进行阈值分割,输入合适阈值和面积卡控,输出阈值分割后的二值图像

三.多矩形标记代码

代码逻辑结构说明:简简单单的多矩形框显示代码

1. 初始化数据存储结构

private List<CogRectangleAffine> blobRects = new List<CogRectangleAffine>();

创建了一个CogRectangleAffine类型的列表blobRects,用于存储每个检测到的缺陷区域的矩形标注信息。

2.遍历每个Blob检测结果,为每个检测到的斑点创建一个固定的20×20像素的红色矩形标注。矩形中心定位在斑点的质心位置(CenterOfMassX,CenterOfMassY)。所有创建的矩形都存储在blobRects列表中,用于后续的显示处理。

3.将之前生成的矩形标注添加到指定工具(CogPixelMapTool1)的输入图像显示中

完整代码:

#region namespace imports using System; using System.Collections; using System.Drawing; using System.IO; using System.Windows.Forms; using Cognex.VisionPro; using Cognex.VisionPro.ToolBlock; using Cognex.VisionPro3D; using Cognex.VisionPro.PixelMap; using Cognex.VisionPro.ImageProcessing; using Cognex.VisionPro.Blob; using System.Collections.Generic; #endregion public class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase { #region Private Member Variables private Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock; private List<CogRectangleAffine> blobRects = new List<CogRectangleAffine>(); #endregion /// <summary> /// Called when the parent tool is run. /// Add code here to customize or replace the normal run behavior. /// </summary> /// <param name="message">Sets the Message in the tool's RunStatus.</param> /// <param name="result">Sets the Result in the tool's RunStatus</param> /// <returns>True if the tool should run normally, /// False if GroupRun customizes run behavior</returns> public override bool GroupRun(ref string message, ref CogToolResultConstants result) { // 运行每个工具 foreach(ICogTool tool in mToolBlock.Tools) mToolBlock.RunTool(tool, ref message, ref result); var blobTool = mToolBlock.Tools["CogBlobTool1"] as CogBlobTool; if (blobTool != null && blobTool.Results != null) { var blobs = blobTool.Results.GetBlobs(); // 清空之前的矩形列表 blobRects.Clear(); for (int i = 0; i < blobs.Count; i++) { var blobResult = blobs[i]; // 创建矩形 CogRectangleAffine rect = new CogRectangleAffine(); rect.Color = CogColorConstants.Red; rect.LineWidthInScreenPixels = 2; rect.CenterX = blobResult.CenterOfMassX; rect.CenterY = blobResult.CenterOfMassY; rect.SideXLength = 20; rect.SideYLength = 20; rect.Rotation = 0; // 添加到列表 blobRects.Add(rect); } } return false; } #region When the Current Run Record is Created /// <summary> /// Called when the current record may have changed and is being reconstructed /// </summary> /// <param name="currentRecord"> /// The new currentRecord is available to be initialized or customized.</param> public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord) { } #endregion #region When the Last Run Record is Created /// <summary> /// Called when the last run record may have changed and is being reconstructed /// </summary> /// <param name="lastRecord"> /// The new last run record is available to be initialized or customized.</param> public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord) { // 遍历所有矩形并添加到CogPixelMapTool1.InputImage的显示中 foreach(CogRectangleAffine rect in blobRects) { // 使用AddGraphicToRunRecord方法添加图形到指定工具的输入图像 mToolBlock.AddGraphicToRunRecord(rect, lastRecord, "CogPixelMapTool1.InputImage", "Input Image"); } } #endregion #region When the Script is Initialized /// <summary> /// Perform any initialization required by your script here /// </summary> /// <param name="host">The host tool</param> public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host) { // DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVE base.Initialize(host); // Store a local copy of the script host this.mToolBlock = ((Cognex.VisionPro.ToolBlock.CogToolBlock) (host)); } #endregion }

四:效果对比

Vision pro效果图

Halcon 效果图

结论:对比效果vp还是会比halcon差点,毕竟halcon是工业级别算子,效果杠杠滴,

AI评价:Halcon通过灰度开闭运算(7x7八角形核)和动态阈值比较,能有效识别断路/短路区域。VisionPro采用PixelMapTool预处理、5x5灰度形态学调整、CogIPTwoImageSubtractTool计算差异和斑点分析,实现了类似功能。虽然VisionPro效果略逊于Halcon的工业级算子,但仍能较好地完成检测任务。两种方法都利用了形态学处理前后图像差异的原理,正常线路变化小,缺陷区域差异显著。实验表明Halcon三行代码即可实现的高效检测,VisionPro需要更多工具组合来完成。

Pcd板线路检测图片链接: https://pan.baidu.com/s/10k3intgL8fxr-mhfBZYD8Q?pwd=wzpn

提取码: wzpn

相关新闻

  • fdsafs
  • 南京哪里可以开病例证明病假条
  • 【计算机毕业设计案例】基于spring boot的高校宿舍管理系统设计基于spring boot + vue 的宿舍管理系统(程序+文档+讲解+定制)

最新新闻

  • 2025-2026年英国艺术留学机构推荐:TOP5评测专业选择指南性价比高 - 品牌推荐
  • 深入解析NXP LPC43S6x异构多核MCU:架构、外设与实战应用
  • 2026年6月伦艺作品集机构推荐:TOP5专业评测对比案例适用场景价格 - 品牌推荐
  • Onebox高级技巧:自定义模板与样式打造独特预览效果
  • 2026上海全周期省心装企口碑榜:老房翻新、品质整装与本地售后能力同步解析 - 速递信息
  • 2026 合肥中考 300 分左右,有哪些专业学校可选 - 辛云教育资讯

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号