C# 在 VisionPro 机器视觉中的图形绘制实战详解
·
前言
在康耐视 VisionPro 项目开发里,ToolBlock 高级 C# 脚本绘图是工业视觉标注标配,不管 Blob 缺陷描边、模板定位框、尺寸文字标注,全都依靠ICogGraphic系列对象实现。本文结合 Blob 轮廓提取案例,拆解 VisionPro 专属 C# 绘图架构、标准编码规范与避坑要点,适合做视觉上位机、在线检测项目开发人员参考。
一、VisionPro 绘图核心设计思想
VisionPro 脚本绘图遵循先缓存、后绘制原则,分为两步:
- 数据收集阶段(GroupRun):遍历视觉结果,生成圆、多边形、十字、文本等图元,存入统一集合;
- 画面渲染阶段(ModifyLastRunRecord):回调函数批量把集合内所有图形渲染到图像图层。 优势:避免循环中频繁刷新画面,提升运行效率,防止多次运行图形叠加错乱,也是工业项目保证鲁棒性的标准写法。
二、关键类与 API 说明
1. 容器:CogGraphicCollection
作用:统一管理所有绘图元素(CogPolygon、CogGraphicLabel、CogGraphicLine),相当于图形仓库。
csharp
运行
private CogGraphicCollection gc = new CogGraphicCollection();
gc.Clear():每次工具运行清空历史图形,杜绝残留;gc.Add(图元):将生成的图形存入容器等待绘制。
2. Blob 轮廓:GetBoundary ()
CogBlobResult.GetBoundary():依据斑点像素边界自动生成闭合多边形CogPolygon,自动贴合不规则工件、裂纹、孔洞外形,无需手动描点。
- Color:设置轮廓线条颜色(Red/Green/Blue/Yellow);
- Space:绑定图像坐标系
CogGraphicSpaceConstants.Image,必加配置,防止图像缩放、工件偏移后图形错位。
3. 渲染函数:AddGraphicToRunRecord
mToolBlock.AddGraphicToRunRecord(图形, lastRecord, "图层名称", "");
| 图层参数 | 使用场景 |
|---|---|
| DisplayLayer | 主预览窗口显示(项目通用) |
| 工具名.InputImage | 仅对应工具弹窗内显示(调试用) |
三、完整落地代码
#region namespace imports
using System;
using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro.Blob;
using Cognex.VisionPro.Graphics;
#endregion
#region Private Member Variables
private CogToolBlock mToolBlock;
//全局图形缓存集合
private CogGraphicCollection gc = new CogGraphicCollection();
#endregion
public override bool GroupRun(ref string message, ref CogToolResultConstants result)
{
gc.Clear();
//顺序执行块内全部视觉工具
foreach (ICogTool tool in mToolBlock.Tools)
mToolBlock.RunTool(tool, ref message, ref result);
//绑定Blob工具,增加空判断提升鲁棒性
CogBlobTool blob = mToolBlock.Tools["CogBlobTool1"] as CogBlobTool;
if (blob == null || blob.Results == null)
{
message = "Blob工具加载异常";
result = CogToolResultConstants.Accept;
return false;
}
CogBlobResult[] blobArr = blob.Results.GetBlobs();
//遍历所有斑点生成红色轮廓
foreach (CogBlobResult item in blobArr)
{
CogPolygon boundary = item.GetBoundary();
boundary.Color = CogColorConstants.Red;
//绑定图像像素坐标系
boundary.Space = CogGraphicSpaceConstants.Image;
gc.Add(boundary);
}
message = $"检出斑点数量:{blobArr.Length}";
return false;
}
//回调:统一绘制所有缓存图形
public override void ModifyLastRunRecord(ICogRecord lastRecord)
{
foreach (ICogGraphic graphic in gc)
{
mToolBlock.AddGraphicToRunRecord(graphic, lastRecord, "DisplayLayer", "");
}
}
//脚本初始化,绑定工具块对象
public override void Initialize(Cognex.VisionPro.ToolGroup host)
{
base.Initialize(host);
mToolBlock = host as CogToolBlock;
}
四、高频踩坑总结
- 图形不显示:图层写错,调试改用
DisplayLayer; - 轮廓偏移乱跑:缺少
Space = Image坐标系绑定; - 多次运行轮廓层层叠加:GroupRun 首行缺少
gc.Clear(); - 空指针报错:未对 Blob、Blob.Results 做判空,无产品时程序崩溃。
五、功能拓展开发
- 斑点中心标注:循环内新增
CogGraphicLabel,在质心位置标注斑点面积、序号; - 分级变色:通过 Blob 面积阈值区分大小缺陷,大缺陷红框、小杂质绿框;
- 数据输出:统计合格 / 不良数量,输出数据对接 IO、上位机 TCP 通讯。
六、总结
基于 C# 的 VisionPro 绘图是机器视觉工程师必备技能,容器缓存 + 回调绘制的架构不仅适配 Blob,同样适用于 PMAlign 定位框、卡尺尺寸线、拟合圆标注等全场景。熟练掌握该写法,可快速完成外观检测、尺寸测量项目的画面可视化开发,为后续 C# 联合 VisionPro 做 WinForm 上位机打下基础。
更多推荐

所有评论(0)