欢迎光临
我们一直在努力

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)
    未经允许不得转载:171主机测评 » VisionPro C# 脚本实战:Blob 斑点自动轮廓描红完整教程
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址