两大视觉平台在“在线采图”这一步,设计哲学截然不同:VisionMaster 是“配置好的相机,拖个模块就能取图”;Halcon 是“用一套算子,去适配所有相机”。这种差异不仅体现在操作习惯上,更深刻影响着项目的开发效率、调试方式与后期维护成本。下面从两个平台各自的实现路径展开,帮你在选型时做出更贴合实际需求的判断。
VisionMaster:相机管理 + 图像源模块
VisionMaster 把“连接相机”和“采图”拆成了两个独立步骤,这是新手最容易卡住的地方。
第一步:相机管理里“登记”相机。打开 VisionMaster 后,需要在“相机管理”页面手动添加全局相机。点击“+”,选择相机,如果列表里没有,点刷新。这里有个关键细节:必须先在 MVS 软件里确认相机在线且能取流,VisionMaster 才能枚举到它。如果 MVS 已经占用了相机,VisionMaster 可能连不上,需要先关闭 MVS 的采集流。
第二步:流程里拖“图像源”模块。在左侧工具箱的“采集”分组里,把“图像源”模块拖到流程中,双击打开参数配置,在“关联相机”下拉框里选择刚刚添加的全局相机。然后在“触发设置”里把触发源改为 SOFTWARE(软触发),或者根据产线需要设为硬触发。
第三步:点击“流程运行”或“单次执行”,图像就出现在预览窗口了。
VisionMaster 的采图逻辑是面向配置的:相机是一个“资源”,图像源是一个“模块”,两者在流程中通过下拉关联。对海康自家相机有深度优化,内置了海康 SDK 的集成,枚举和连接都很顺畅。
Halcon:图像采集接口(IAI)统一抽象
Halcon 本身不“认识”任何相机品牌,它通过图像采集接口(Image Acquisition Interface, IAI)来桥接。每个接口是一个动态加载的 DLL,把不同厂商 SDK 的差异“翻译”成 Halcon 统一的算子。
核心算子只有两个:open_framegrabber负责连接设备,grab_image(或grab_image_async)负责取图。
用open_framegrabber时,第一个参数AcqName指定接口名称。对于 GigE 相机,填'GigEVision2';对于海康相机,只要 Halcon 安装了 GigE Vision2 接口,就能通过标准协议连接,不需要海康自己的驱动。连接成功后得到一个AcqHandle,后续所有取图操作都用这个句柄。
取图模式有三种:SingleFrame(单次)、MultiFrame(指定次数)、Continuous(连续)。设置AcquisitionMode参数来切换。连续采集时调用grab_image_start启动,然后用grab_image_async循环取图并立即启动下一帧,这是高帧率场景的标准写法。
最省事的方式是用“图像采集助手”:在 HDevelop 里打开助手,选GigEVision2接口,点连接、点采集,实时画面就出来了,助手会自动生成对应的算子代码,直接复制到程序里就行。
关键差异一览
| 维度 | VisionMaster | Halcon |
|---|---|---|
| 接入方式 | 相机管理 + 图像源模块,拖拽关联 | open_framegrabber+grab_image算子 |
| 相机发现 | 依赖 MVS 先枚举,VM 下拉选择 | 通过 IAI 接口直接枚举 |
| 品牌覆盖 | 海康相机深度优化 | 3000+ 种工业相机 |
| 参数调节 | GUI 属性面板 | set_framegrabber_param算子 |
| 典型误区 | MVS 占用相机导致 VM 连不上 | 忘装对应接口(如 GigEVision2)导致列表为空 |
实操要点
VisionMaster 侧:确保MVS 没有在采集流,否则 VM 连不上相机。触发源设为 SOFTWARE 时,需要手动点“执行”才出一帧;设为 CONTINUOUS 则连续出图。
Halcon 侧:如果open_framegrabber报错说找不到接口,说明该接口 DLL 没安装,需要通过 MVTec 软件管理器(SOM)安装,比如GigEVision2接口。连接 3D 相机时,接口名称可能不同(如 RealSense 用RealSense),且部分功能可能受限。
一句话总结:VisionMaster 是“先让 MVS 把相机管好,VM 再拖模块取图”;Halcon 是“选对接口名,用算子直接连”。前者适合海康生态快速落地,后者适合多品牌混合的算法密集型项目。