一、前言
在机器视觉缺陷检测、孔洞识别项目中,使用CogBlobTool抓取目标斑点、用 C# 脚本自动描轮廓是最常用方案。本文基于 VisionPro ToolBlock 高级脚本,实现自动提取 Blob 外轮廓、红色描边、原图叠加显示,适配裂缝、杂质、圆孔检测场景。
二、整体原理
三、完整可用源码
1. 头部引用区
#region namespace imports
using System;
using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro.Blob;
using Cognex.VisionPro.Graphics;
#endregion
2. 成员变量区
#region Private Member Variables
private CogToolBlock mToolBlock;
//图形集合:缓存所有轮廓,统一绘图
private CogGraphicCollection gc = new CogGraphicCollection();
#endregion
3. 主运行逻辑 GroupRun
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 || blob.Results.GetBlobs().Length == 0)
{
message = "未检测到有效斑点";
return false;
}
//遍历每一个斑点,生成红色轮廓
foreach (CogBlobResult b in blob.Results.GetBlobs())
{
//获取斑点闭合外轮廓
CogPolygon p = b.GetBoundary();
//设置轮廓颜色:红色
p.Color = CogColorConstants.Red;
//绑定图像坐标系,解决图形偏移错位
p.Space = CogGraphicSpaceConstants.Image;
//轮廓存入集合,等待统一绘制
gc.Add(p);
}
message = $"一共检测到{blob.Results.GetBlobs().Length}个斑点";
return false;
}
4. 绘图回调 ModifyLastRunRecord
public override void ModifyLastRunRecord(ICogRecord lastRecord)
{
//遍历所有缓存图形,绘制到主预览画面
foreach (ICogGraphic c in gc)
{
//DisplayLayer=全局主图层,画面直接显示标注
mToolBlock.AddGraphicToRunRecord(c, lastRecord, "DisplayLayer", "");
}
}
5. 初始化绑定
public override void Initialize(Cognex.VisionPro.ToolGroup host)
{
base.Initialize(host);
mToolBlock = host as CogToolBlock;
}
四、关键代码分段详解
1. b.GetBoundary()
从单个 Blob 结果中提取闭合多边形轮廓,沿着斑点实际边缘生成线条,是实现描红的核心 API。
2. p.Space = CogGraphicSpaceConstants.Image;
强制图形使用图像像素坐标系,不加此行:图像缩放、ROI 偏移后轮廓会错位乱跑。
3. gc.Clear()
每次运行清空容器,防止多次运行轮廓重复叠加在画面上。
4. 图层DisplayLayer
- DisplayLayer:全局预览窗口显示(日常项目首选);
- "CogBlobTool1.InputImage":仅在 Blob 工具弹窗内显示,调试专用。
五、Blob 工具配套参数设置
六、拓展进阶
七、总结
该写法是 VisionPro 工业项目标准绘图规范:先收集所有图形→后统一绘制,代码鲁棒性高、易维护,广泛用于裂纹检测、缺料、孔洞不良等视觉项目。




