VisionPro C# 脚本实战:Blob 斑点自动轮廓描红完整教程
·
一、前言
在机器视觉缺陷检测、孔洞识别项目中,使用CogBlobTool抓取目标斑点、用 C# 脚本自动描轮廓是最常用方案。本文基于 VisionPro ToolBlock 高级脚本,实现自动提取 Blob 外轮廓、红色描边、原图叠加显示,适配裂缝、杂质、圆孔检测场景。
二、整体原理
CogBlobTool:灰度二值化,筛选有效斑点(面积、圆度、长宽比过滤杂质);- 脚本遍历所有 Blob,调用
GetBoundary()生成斑点闭合轮廓多边形; - 统一存入图形容器,在
ModifyLastRunRecord批量渲染绘制,实现原图红圈标注。
三、完整可用源码
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 工具配套参数设置
- 二值极性:斑点黑底选「浅色区域」,斑点白底选「深色区域」;
- 特征筛选:最小面积过滤灰尘噪点,圆度 / 长宽比筛选异形杂质;
- 测试:单独运行 Blob,预览窗口确认斑点被正确框选后再启用脚本。
六、拓展进阶
- 标注文字:在
foreach内新增CogGraphicLabel,在斑点质心标注面积、序号; - 多颜色区分:根据面积大小,大瑕疵红圈、小杂质绿圈;
- 缺陷统计:统计 Blob 数量,输出 OK/NG 结果到端口对接上位机。
七、总结
该写法是 VisionPro 工业项目标准绘图规范:先收集所有图形→后统一绘制,代码鲁棒性高、易维护,广泛用于裂纹检测、缺料、孔洞不良等视觉项目。
更多推荐


所有评论(0)