VisionMaster 4.0 常用工具入门:图像采集、定位、测量、识别一篇打通
如果你把机器视觉检测想象成一条流水线,那么 VisionMaster(海康机器人 VM 算法开发平台)就是把这条流水线做成了"积木":从相机取图、找到工件、量尺寸、读码,到最后输出 OK/NG,每一步都对应一个可以拖来拖去的"工具"。你不需要从零写图像处理算法,只要会连线、会调参数,就能搭出一个完整的视觉方案。本文基于 VisionMaster 4.0.0 官方手册,带你过一遍日常项目里最常用的那批工具,适合刚上手 VM 的同学和需要复习的工程师。
一、VisionMaster 是什么
VisionMaster(简称 VM)是海康机器人自主开发的机器视觉图形化算法平台,提供千余个自主研发的图像处理算子,支持多种图像采集设备,覆盖机器视觉四大类需求:定位、测量、识别、检测。
它有三种开发模式:
- 图形化界面开发:拖拽工具、连线、双击配参,是最常用的模式,也是本文的内容;
- SDK 二次开发:调用 VM 的控制与数据获取接口,在自己的程序里跑方案;
- 算子设计模式:把算子封装成自定义视觉工具,嵌入自己的检测流程。
图形化开发的核心概念只有两个:
- 方案(Solution):一个完整的视觉工程,里面可以包含多个流程;
- 流程(Flow):由若干工具模块按数据流连线组成的处理链路,图像从第一个模块流向最后一个模块。
工具的使用方式统一为三步:拖入流程编辑区 → 按逻辑连线 → 双击配置参数。
二、工具箱分类总览
VM 左侧工具箱按功能分为 12 个大类,先建立整体地图,再逐个学常用工具,思路会清楚很多。
【插图 1:软件界面与流程搭建效果】(发布时在此插入图片 03-软件界面截图.png,可替换为自己的方案截图)
【插图 2:VisionMaster 工具箱分类体系图】(发布时在此插入图片 01-工具箱分类体系图.png)
| 分类 | 主要工具 | 干什么 |
|---|---|---|
| 图像采集 | 图像源、输出图像、缓存图像、光源、多图采集 | 取图、存图、控制光源 |
| 定位 | 特征匹配、灰度匹配、圆查找、直线查找、BLOB 分析、卡尺工具、边缘查找、位置修正等 20 种 | 找工件、找特征、输出位置 |
| 测量 | 线圆测量、线线/圆圆测量、点圆/点线/点点测量、圆/直线拟合、亮度测量、像素统计、直方图 | 算距离、尺寸、角度、亮度 |
| 识别 | 二维码识别、条码识别、字符识别 | 读码、OCR |
| 深度学习 | DL 字符识别、DL 目标检测、DL 分类、DL 分割、DL 异常检测等 | 复杂背景/缺陷的 AI 方案 |
| 标定 | N 点标定、标定板标定、标定转换、单位转换、畸变标定/校正 | 像素坐标与物理坐标换算 |
| 对位 | 相机映射、单点对位、点集对位、线对位 | 贴合、纠偏 |
| 图像处理 | 二值化、滤波、增强、形态学处理、仿射变换、图像拼接、圆环展开 | 预处理与图像变换 |
| 颜色处理 | 颜色抽取、颜色测量、颜色转换、颜色识别 | 颜色类检测 |
| 缺陷检测 | 字符缺陷、直线/圆弧边缘缺陷、缺陷对比等 | 划痕、污点、边缘缺陷 |
| 逻辑工具 | 条件检测、分支模块、格式化、脚本、Group、变量计算 | 流程控制与数据处理 |
| 通信 | 接收数据、发送数据、相机 IO 通信 | 与 PLC、上位机、串口交互 |
初学者最先需要掌握的是前四类(采集、定位、测量、识别)加上逻辑工具和标定,本文就围绕这些展开。
三、准备工作:所有工具通用的三个配置
在讲具体工具之前,先讲清楚每个工具双击后都会遇到的三块通用配置,官方手册称之为"基本参数""运行参数""结果显示",理解它们后面就一通百通。
3.1 基本参数:图像输入与 ROI
- 图像输入:选择本工具处理的是哪一路图像,从下拉栏选择上游模块即可。
- ROI 区域(感兴趣区域) :设置后,工具只处理 ROI 内的图像 。ROI 有两种创建方式:
- 绘制:全选(整幅图)、矩形、圆形,部分模块还支持最多 32 个顶点的多边形;
- 继承:继承前面模块输出的特征区域(圆/矩形参数),典型用法是继承位置修正后的 ROI,让检测框自动跟随工件。
注意 ROI 自带方向:把 ROI 看作一个坐标系,箭头方向为 X 轴正向,"从上到下""从左到右"查找都以此为准。
3.2 屏蔽区:让 ROI 里的干扰物"隐形"
ROI 内如果有固定的干扰特征(Logo、刻字、螺丝孔、油污、丝印),可以在基本参数里设置屏蔽区。官方手册原文:
屏蔽区:自定义最多 32 个顶点的多边形屏蔽区,屏蔽区的图像不会被处理。
使用要点:
- 点 ROI 工具栏的屏蔽区按钮,在图上逐点单击画多边形、双击闭合,可重复画多个;
- 屏蔽区是"挖洞",只跳过多边形内部,其余区域照常处理;
- 开启位置修正后,屏蔽区会随 ROI 一起平移、旋转;
- 屏蔽区不要画大盖住真实目标,否则会漏检。
3.3 结果显示:图形、文字与 OK/NG
每个工具的结果显示包含四部分:
- 结果判断:对输出结果设阈值,比如圆半径范围,超限时模块状态变 NG(轮廓变红色);
- 图像显示:是否在图像上渲染图形(线、圆、匹配框等),可设 OK/NG 颜色;
- 文本显示 :把结果以文字渲染到图像图层,可设置内容、颜色、字号、透明度、位置 X/Y;
- 前项显示:是否把上游模块的图形与文字一起显示------这是理解 VM 图层叠加机制的关键,后面会专门讲。
四、核心常用工具
4.1 图像源:每个方案的起点
图像源模块决定图像从哪来,支持三种来源:
- 本地图像:加载单张图片或整个文件夹,调参阶段最常用,支持自动切换下一张;
- 相机:直连海康工业相机,可设置触发、取图间隔;
- SDK:通过 SDK 接口喂入图像数据。
常用参数:像素格式(Mono8、Mono10、Mono12、RGB24、YUV、Bayer 等)、取图间隔(ms)、触发设置。
小提示:学习阶段建议先用本地图像把方案调通,再切换到相机,能排掉大部分"取图"和"算法"互相干扰的问题。
4.2 特征匹配:最核心的定位工具
特征匹配使用图像的边缘特征 做模板,在图中搜索与模板相似的目标,输出位置、角度、缩放和匹配分数,可用于定位、计数、判断有无。
它分两种模式,选型时按精度和速度取舍:
| 对比项 | 高精度匹配 | 快速匹配 |
|---|---|---|
| 特征精细度 | 特征点密集、模板精细 | 特征点相对稀疏 |
| 精度 | 高 | 略低 |
| 耗时 | 较久 | 快 |
| 适用场景 | 定位精度要求高、目标复杂 | 高速产线、粗定位、计数 |
使用流程:
- 双击模块,框选建模区域(矩形、圆形或多边形),点击"生成模型/训练模型";
- 设置运行参数:匹配个数(期望找到的目标数,范围 1~200)、匹配分数(相似度阈值,太低会误检,太高会漏检)、角度范围(默认 -180°~180°)、尺度范围(默认 1.0~1.0,即不允许缩放);
- 运行后输出匹配点坐标、角度和分数,供后续模块订阅。
其中"特征尺度"控制边缘点密度(范围 1~20,值越小点越密),"对比度阈值"控制边缘稳定性(范围 1~255,越大越严苛)。
4.3 位置修正:让检测框跟着工件走
工件在产线上位置和角度都会变,固定 ROI 会错位。位置修正(Fixture)专门解决这个问题。
它以特征匹配的基准点、基准框 建立参照,运行时用运行点、运行框算出当前图像相对基准的像素偏移和角度偏移,让后续所有 ROI 自动跟随:
- 基准点/基准框:创建基准时匹配点、匹配框的位置;
- 运行点/运行框:每张图实际匹配到的位置;
- 两者相减得到平移量,框的角度差得到旋转量。
两种修正方式:按点修正 (直接传入点)和按坐标修正(传入 x、y 坐标)。标准用法是:特征匹配 → 位置修正 → 后续检测模块(ROI 选择继承位置修正)。
4.4 BLOB 分析:数个数、找污点
BLOB 分析在灰度图像中检测、定位和分析目标连通块,输出目标的存在性、数量、位置、形状、方向、面积以及 Blob 之间的拓扑关系。
使用时需要先对目标做二值化(也可以直接配置阈值方式):
| 阈值方式 | 检出的目标灰度范围 |
|---|---|
| 单阈值 - 暗于背景 | 0, 低阈值-1 |
| 单阈值 - 亮于背景 | 低阈值, 255 |
| 双阈值(高阈值 > 低阈值) | 低阈值, 高阈值 |
| 双阈值(低阈值 > 高阈值) | 0, 高阈值 与 低阈值, 255 两段 |
典型场景:颗粒计数、孔位有无、印刷污点、面积判定。配合图像处理中的二值化、形态学(腐蚀/膨胀/开闭运算)使用,效果更稳定。
4.5 卡尺工具:测宽度、测间距
卡尺工具用于测量目标对象的宽度、边缘位置、边缘对间距。它需要操作者明确给出大致测量区域,通过选择边缘模式完成定位:
- 单边缘:检测区域内的边缘位置,可用于定位、计数、判断有无;
- 边缘对:检测一对边缘之间的间距。
两个关键参数:
- 滤波尺寸:增强边缘、抑制噪声,边缘模糊或有噪点时适当调大;但边缘挨得太近时调大会丢边缘,需按实际情况设置;
- 边缘阈值(梯度阈值):范围 0~255,只有梯度超过该值的边缘点才会被检出,值越大越抗噪但边缘越少。
4.6 圆查找与直线查找:拟合几何特征
- 圆查找:在扇环 ROI 内先检测出多个边缘点,再拟合成圆,输出圆心坐标和半径,用于圆孔定位、圆形基准测量;
- 直线查找:在条状 ROI 内查找特征点集合并拟合成直线,边缘类型可选"最强"(取梯度最大的边缘点集合)、"最后一条"等,用于引脚共线、工件边线定位。
它们的输出(圆、直线)通常订阅给测量模块做进一步计算,是测量链路的"前端"。
4.7 测量工具:把几何特征变成尺寸数字
定位工具给出的是几何特征,测量工具负责算距离、角度:
- 线圆测量:返回直线与圆的垂直距离和交点坐标,数据来源支持"订阅"(圆查找+直线查找)或"绘制";
- 线线、圆圆测量:线线夹角/距离、圆圆心距等;
- 点圆、点线、点点测量:点到圆、点到线、点到点的距离与角度,点和线都可以订阅上游模块的输出;
- 圆拟合与直线拟合:对多点做几何拟合;
- 亮度测量、像素统计、直方图:做灰度类判定。
测量模块的典型接法:圆查找/直线查找 → 测量模块(订阅方式输入),模块会自动把结果渲染成测量线和数值文字。
4.8 识别工具:读码与 OCR
| 工具 | 支持内容 | 说明 |
|---|---|---|
| 二维码识别 | QR 码、DataMatrix 码 | 一次可识别多个,不确定码型时建议两个开关都打开 |
| 条码识别 | CODE39、CODE128、库德巴、EAN、交替 25、CODE93 | 容忍任意角度旋转和一定倾斜;设"条码个数"控制期望输出数 |
| 字符识别(OCR) | 标签上的字符文本 | 需要先做字符训练,拖入模块后按向导设置字符提取框、训练字符库 |
对于复杂背景、低对比度、变形的字符,手册建议改用深度学习模块(DL 字符识别、DL 单字符识别)。
4.9 N 点标定:像素与物理世界的换算
要让视觉结果引导机械手,必须先做标定,确定相机坐标系与机械臂世界坐标系之间的转换关系。
N 点标定通过 N 组"像素坐标 + 物理坐标"计算转换关系并生成标定文件,要求 N ≥ 4。常见方式:
- 上相机抓取:相机固定,移动标定板/工件取点;
- 下相机对位:机械臂带动相机按设定方向移动,每次移动触发取图,同步标定。
标定后配合"标定转换"把像素坐标换算为物理坐标,配合"单位转换"做长度单位换算。
4.10 逻辑工具:让方案会判断、会算数
条件检测:输出 OK/NG
条件检测判断输入数据是否满足条件,满足显示 OK,否则显示 NG。
- 判断方式:任意 (对所有条件做逻辑或)、全部(逻辑与);
- 条件类型:int / float,只能绑定对应类型的数据;
- 条件本身订阅前面模块的模块状态或结果输出(如半径、个数、匹配分数)。
条件检测之后常接分支模块,把 OK、NG 引到不同处理路径。
格式化:把结果拼成字符串
格式化工具把多个数据整合成字符串输出:既可以订阅上游模块的结果,也可以在输入区直接输入固定文字,通信输出前通常用它整理数据。它支持分隔符、数组下标(输入 * 输出全部数组结果)、结束符(\r、\n、\r\n)。
脚本:内置 C# 处理复杂逻辑
脚本模块支持 C# 脚本(.cs,可导入导出,可用 Visual Studio 附加调试),Init() 只在首次运行时执行一次,Process() 每次运行执行。常用接口分四类:
| 类别 | 接口 | 用途 |
|---|---|---|
| 取模块结果 | CurrentProcess.GetModule("模块名").GetValue("参数名") |
读取上游模块输出 |
| 设模块参数 | CurrentProcess.GetModule("模块名").SetValue("参数名", 值) |
改写运行参数 |
| 输出自定义结果 | SetFloatValue(key, value) / SetStringValue(key, value) |
把计算结果输出为模块结果 |
| 全局变量 | GlobalVariableModule.SetValue/GetValue |
跨流程共享数据 |
| 通信发送 | GlobalCommunicateModule.GetDevice(id).SendData(...) |
TCP/UDP/串口/PLC 发数据 |
下面是一个常见例子:把点点测量输出的角度统一加 180°,并输出为数值与文本结果。
csharp
// 脚本模块:角度偏移 180° 并输出
// 注意:GetValue 的参数名请以自己模块"模块结果"里显示的名称为准
public int Process()
{
float angle = 0f;
// 1. 获取上游点点测量模块的角度(模块名与参数名按实际修改)
object obj = CurrentProcess.GetModule("点点测量1").GetValue("Angle");
if (obj != null)
{
angle = Convert.ToSingle(obj);
}
// 2. 角度加 180°,并归一化到 0~360
angle = angle + 180.0f;
if (angle >= 360.0f)
{
angle -= 360.0f;
}
// 3. 输出自定义结果:数值供后续模块订阅,字符串直接用于显示
SetFloatValue("AngleNew", angle);
SetStringValue("AngleText", "角度:" + angle.ToString("f3"));
return 0;
}
编译成功后,脚本模块的"模块结果"中就会出现 AngleNew 和 AngleText,格式化、条件检测、通信模块都可以订阅。
4.11 输出图像:查看与保存
输出图像模块对全局图像或处理后的图像进行输出和存储,常用配置:
- 输入源:选方案中图像源或任意模块处理后的图像;
- 存图使能:关闭时仅输出显示,打开后可同时存图;
- 保存渲染图/保存原图:渲染图包含匹配框、测量线、文字等叠加结果;
- 渲染参数:设置图像上渲染文本的内容、颜色、字号、位置 X/Y;
- 前项存储:开启后可以保存前面模块的图形和文字结果(例如包含圆查找结果与文字的图像);
- 图形倍率类型:注意"原图尺寸"模式下界面字体在存图中可能偏小,可选"界面尺寸"或"自定义倍率"。
4.12 把结果文字显示到图像图层
这是初学者高频疑问:脚本或格式化算出的文字怎么显示在图上?
VM 的图形和文字沿数据流向下游叠加,每个模块只渲染自己的结果,通过"前项显示"把上游画面带过来。所以标准做法是:
- 脚本用
SetFloatValue / SetStringValue输出结果; - 后面接一个格式化模块(或直接在脚本模块上配置),在结果显示 → 文本显示中打开开关,文本内容订阅输出结果,设置字号、颜色、位置;
- 确认下游模块的"前项显示"开启,上游的测量线会和这行字一起显示;
- 输出图像模块的输入源选最下游模块,最终画面就是"图形 + 文字"。
如果上游模块自己已经有一行旧文字,去它的"文本显示"关掉或调整位置即可,避免重复。
五、典型方案怎么串
有了这些工具,一个完整方案的标准链路如下。
【插图 3:VisionMaster 典型视觉方案流程图】 (发布时在此插入图片 02-典型方案流程图.png)
以一个圆盘零件的检测为例:
- 图像源载入本地图或连接相机;
- 特征匹配找到圆盘的基准位置和角度(粗定位);
- 位置修正建立跟随基准,后续 ROI 自动跟随;
- 在修正后的 ROI 上并行做:圆查找 找中心孔、卡尺工具 测槽宽、BLOB 分析 数加强筋、二维码识别读追溯码;
- 点点测量计算圆心到槽的距离和角度;
- 条件检测按尺寸范围判断,OK 放行、NG 剔除;
- 格式化 把结果拼成字符串,文本显示到图像上,并通过发送数据上传 PLC;
- 输出图像保存带渲染结果的图片。
这条链路的工具替换性很强:把卡尺换成缺陷检测就是外观检测,把圆查找换成字符识别就是标签检测,骨架基本不变。
六、常见坑与建议
- ROI 方向搞反:ROI 是带坐标系的,查找方向(从上到下/从左到右)以 ROI 箭头为 X 轴正向,旋转 ROI 后方向感会变化,调"边缘类型"前先确认 ROI 方向。
- 匹配分数阈值两难:阈值太高容易漏检,太低容易误检;先用样本图扫一遍,把最差点的分数留 10% 左右余量。
- 高精度匹配滥用:粗定位、计数场景用快速匹配即可,高精度匹配更耗时,产线节拍紧张时尤其明显。
- BLOB 前忘记预处理:噪点多时先二值化,再用形态学开运算去小噪点、闭运算填小孔,计数结果会稳定很多。
- 位置修正后 ROI 仍画死:修正之后的检测模块 ROI 要选"继承"位置修正,否则跟随不生效。
- 滤波尺寸盲目调大:卡尺、边缘查找的滤波尺寸能抗噪,但边缘间距小时会丢边缘,遵循"能小不大"。
- 脚本结果没输出 :脚本里算出的值不调用
SetFloatValue/SetStringValue,其他模块订阅不到;参数名要与"模块结果"里显示的一致。 - 文字想"贴回"上游模块:图层只能向下游叠加,不能回贴。要在最终画面同时看到上游图形和新文字,把文字写在下游模块并开启前项显示。
- 存图文字太小:输出图像选"原图尺寸"时字体按界面尺寸渲染,高清图上会显小,改"界面尺寸"或"自定义倍率"。
- 找不到帮助文档 :VM 随软件自带完整中文手册,安装目录下
Help\CH\HIKVisionMasterHelp.chm,软件内按 F1 即可打开,每个工具的参数都有说明。
七、小结
- VisionMaster 是图形化机器视觉平台,方案由流程组成,流程由工具连线组成,工具统一遵循"拖入 → 连线 → 双击配参"。
- 工具箱 12 类中,初学者优先掌握图像采集、定位、测量、识别、逻辑工具、标定,本文覆盖的 10 个左右工具可以应付大部分常规项目。
- 通用机制有三条:ROI 限定处理范围(屏蔽区挖洞) 、位置修正让 ROI 跟随工件 、结果显示与前项显示控制图形文字的图层叠加。
- 复杂计算交给脚本(C#,用
SetXxxValue输出结果),结果整理交给格式化,最终判定交给条件检测,对外输出交给通信与输出图像。 - 学 VM 最快的方式是拿一组本地图,按"图像源 → 匹配 → 修正 → 检测 → 判定 → 输出"完整走一遍,参数对照 F1 手册逐项调,比看十遍教程都管用。


