机器视觉实战 —— 利用CogGraphicLabel脚本高效管理多文本显示

发布时间:2026/5/19 14:57:09

机器视觉实战 —— 利用CogGraphicLabel脚本高效管理多文本显示 1. 为什么需要CogGraphicLabel脚本管理多文本在工业视觉检测项目中我们经常需要在图像上叠加显示各种检测结果。比如测量两个圆心的距离、两条直线的夹角、某个点到线的垂直距离等。传统做法是使用Label工具逐个添加文本但这种方式存在三个明显痛点第一是代码冗余。每添加一个文本标签就需要重复设置字体、颜色、对齐方式等属性。我做过一个统计在显示5个检测结果的场景下传统写法需要重复调用属性设置代码35次整个脚本看起来就像复制粘贴的流水账。第二是维护困难。当需要调整字体大小时必须逐个修改每个标签的属性。去年我接手过一个项目客户要求将所有检测结果的字体从Arial改为楷体结果我花了半小时在2000行代码里查找替换还漏改了3处。第三是定位不灵活。工业现场的检测需求经常变化今天要显示5个参数明天可能增加到8个。用传统方法就需要重新调整每个文本的Y坐标位置否则会出现重叠。有次我为了给新增的3个检测结果腾位置不得不手动计算并修改了所有文本的坐标参数。2. CogGraphicLabel的核心功能解析CogGraphicLabel是VisionPro提供的一个非常实用的文本显示工具它就像图像上的便利贴可以灵活地标注各种信息。经过多个项目的实战验证我总结了它最常用的五个功能特点文本内容动态绑定支持直接显示变量值。比如测量得到的距离值可以用label.SetXYText(x, y, $距离值:{distance:f2})这样的方式实时更新。这个功能在显示检测数值时特别有用避免了手动拼接字符串的麻烦。视觉样式自定义通过以下属性可以打造专业的显示效果Color属性设置文本颜色我习惯用绿色表示合格红色表示不良BackgroundColor添加背景色在复杂背景下提高可读性Font属性调整字体样式工业现场建议使用等宽字体如ConsolasRotation支持文本旋转适合在有限空间显示长文本智能定位系统文本位置可以通过SetXYText方法精确定位。我在处理PCB检测项目时需要将检测结果标注在每个测试点旁边就是通过动态计算坐标实现的。相比固定坐标的方式这种动态定位能适应不同尺寸的工件。批量管理接口所有标签可以添加到CogGraphicCollection集合中统一管理。这个设计太实用了就像把散落的文件装进文件夹需要清除或更新时操作集合就可以了。性能优化机制经过测试显示20个文本标签时帧率仍能保持在30fps以上。这是因为CogGraphicLabel采用了硬件加速渲染比GDI绘制的文本效率高很多。3. 脚本封装的具体实现步骤3.1 环境准备与引用配置首先需要确保项目引用了必要的DLL文件。打开Visual Studio在解决方案资源管理器中右键点击引用选择添加引用。在弹出的窗口中浏览到VisionPro安装目录通常路径是C:\Program Files\Cognex\VisionPro\bin找到并添加以下两个关键组件Cognex.VisionPro.Dimensioning.dllCognex.VisionPro.Core.dll我建议在项目初期就做好这些基础配置。去年有个项目因为遗漏了Dimensioning.dll调试时一直报找不到CogGraphicLabel的错误浪费了两小时排查时间。3.2 图形集合初始化在类成员变量区域声明图形集合private CogGraphicCollection gc new CogGraphicCollection();这个集合相当于一个容器后续所有文本标签都会存放在这里。为什么要用集合举个例子就像超市购物时用购物车装商品结账时一次性处理比一件件拿到收银台高效得多。3.3 封装AddLabel方法核心的封装代码如下我添加了详细的注释说明每个参数的作用private void AddLabel(double x, double y, string text, CogColorConstants color) { CogGraphicLabel label new CogGraphicLabel(); // 设置文本对齐方式左对齐/居中/右对齐 label.Alignment CogGraphicLabelAlignmentConstants.BaselineLeft; // 设置背景色建议使用浅色系 label.BackgroundColor CogColorConstants.LightGrey; // 设置文本颜色通过参数传入 label.Color color; // 设置字体样式楷体30号字 label.Font new Font(楷体, 30); // 设置文本位置和内容 label.SetXYText(x, y, text); // 文本旋转角度0表示不旋转 label.Rotation 0; // 将标签添加到图形集合 gc.Add(label); }这个方法有四个关键参数x/y文本显示的坐标位置text要显示的内容支持字符串插值color文本颜色建议定义颜色常量3.4 在GroupRun中调用实际使用时只需要简单调用AddLabel方法即可AddLabel(30, 600, $圆心距:{PP.Distance:f2}mm, CogColorConstants.Green); AddLabel(30, 700, $角度:{angle:f2}°, CogColorConstants.Green);这种封装方式使主逻辑非常清晰。最近一个检测项目需要显示12个参数用这个方法只用了12行代码而传统方式需要近100行。4. 高级应用技巧与避坑指南4.1 动态布局方案当需要显示多个检测结果时可以采用自动排列算法。这是我的一个常用方案double startY 100; double lineHeight 50; for(int i0; iresults.Count; i) { AddLabel(30, startY i*lineHeight, results[i], colors[i]); }这样新增结果时只需要往results列表添加内容即可位置会自动计算。在液晶屏检测项目中我用这个方法轻松应对了从6个到18个检测参数的变更需求。4.2 多语言支持技巧通过资源文件实现多语言切换AddLabel(x, y, Resources.Strings.DistanceLabel, color);在中文资源文件中设置DistanceLabel为距离英文资源文件中设为Distance。这个方法让我们的设备成功打入了东南亚市场。4.3 常见问题排查文字显示模糊确保字体大小与显示分辨率匹配。在4K屏幕上30号字可能显得过小建议等比放大。中文乱码问题使用支持中文的字体如楷体、微软雅黑。遇到过客户电脑缺少指定字体的情况解决方案是将字体文件打包到安装程序。性能优化当文本数量超过50个时建议减少使用透明背景合并相近位置的文本使用更简单的字体4.4 样式主题化管理定义颜色常量类public static class AppColors { public static CogColorConstants Normal CogColorConstants.Green; public static CogColorConstants Warning CogColorConstants.Yellow; public static CogColorConstants Error CogColorConstants.Red; }使用时直接调用AddLabel(x, y, text, AppColors.Warning)这样既能保持界面风格统一又方便整体调整配色方案。5. 实战案例PCB板检测结果展示最近完成的一个PCB检测项目完美运用了这套方法。需求是在图像上显示20多个检测点的测量结果包括焊点直径引脚间距元件偏移量角度偏差通过封装好的AddLabel方法配合自动布局算法只用了不到1小时就完成了结果显示模块的开发。客户特别满意这种整洁的排版方式所有参数一目了然。关键实现代码如下// 显示基础信息 AddLabel(20, 20, $板号:{pcbID}, AppColors.Info); AddLabel(20, 70, $检测时间:{DateTime.Now:HH:mm:ss}, AppColors.Info); // 显示测量结果 int row 0; foreach(var item in measurementList) { var color item.IsPass ? AppColors.Normal : AppColors.Error; AddLabel(200, 120 row*40, ${item.Name}:{item.Value:f2}{item.Unit}, color); row; } // 显示最终判定 var resultColor isOverallPass ? AppColors.Normal : AppColors.Error; AddLabel(20, 120 row*40, $最终判定:{(isOverallPass?合格:不合格)}, resultColor);这个案例充分展示了脚本封装的价值代码量减少70%开发效率提升3倍后续维护也变得非常简单。当客户新增两个检测项目时我只用了10分钟就完成了界面适配。

相关新闻