Halcon 机器视觉:工作经验分享
·
一、为什么选择 Halcon?
三个核心理由:
| 优势 | 说明 |
|---|---|
| 算法库全 | 1500+ 算子,覆盖定位、测量、识别、缺陷检测 |
| 精度高 | 亚像素级处理,工业级稳定性 |
| 开发灵活 | 支持 C++/C#/Python,可独立部署 |
适用场景:
- 产品尺寸测量
- 表面缺陷检测
- 二维码/字符识别
- 机器人引导定位
二、Halcon 核心模块速览
1. 图像采集
open_framegrabber ('GenICam', 0, 0, 0, 0, 0, 0, 'default', -1, 'default', 'camera', 'default', 0, -1, AcquireHandle)
grab_image (Image, AcquireHandle)
要点: 先配置相机参数(曝光、增益),再采集,避免每次重复初始化。
2. 图像预处理
rgb1_to_gray (Image, GrayImage) % 转灰度
gauss_filter (GrayImage, Filtered, 2) % 高斯滤波
threshold (Filtered, Region, 50, 255) % 阈值分割
常用算子:
emphasize— 增强对比度median_image— 去噪dyn_threshold— 动态阈值(光照不均时用)
3. 特征提取与定位
find_shape_model (Image, ModelID, -0.2, 0.2, 0.5, 1, 0.9, 'least_squares', 0, 1.2, Row, Column, Angle, Score)
vector_to_hom_mat2d (Row, Column, Angle, HomMat2D)
核心思路: 先模板匹配定位,再基于位置做后续检测,避免全图搜索。
4. 测量与计量
create_metrology_model (ModelHandle)
add_metrology_object_measure (ModelHandle, ...)
fit_metrology_object (ModelHandle, ...)
典型应用: 孔径测量、间距检测、角度计算。
5. OCR/OCV 识别
create_ocr_class_mlp ('Default_OCR', 'Default', [], [], OCRHandle)
do_ocr_multi_class_mlp (Image, Region, OCRHandle, String, Confidence)
注意: 训练数据要覆盖实际场景的字体、光照、角度变化。
三、实战案例:螺丝缺陷检测
需求
检测螺丝头部划痕、缺角、脏污。
方案流程
图像采集 → 定位螺丝 → 提取ROI → 缺陷检测 → 结果输出
关键代码
% 1. 定位螺丝
find_shape_model (Image, ScrewModelID, -0.1, 0.1, 0.8, 1, 0.9, 'least_squares', 0, 1.2, Row, Column, Angle, Score)
% 2. 提取头部 ROI
gen_circle (Circle, Row, Column, 15)
intersection (Circle, Domain, ROI)
% 3. 表面缺陷检测(划痕)
lines_gauss (Image, Lines, 1.5, 'dark', 'true', 'bar-shaped', 'true')
select_shape (Lines, Defects, 'area', 'and', 10, 500)
% 4. 缺角检测
fit_circle_contour_xld (ROI, 'geotf', -1, 0, 0, 3, 2, CircleRow, CircleCol, CircleR, StartPhi, EndPhi, PointOrder)
% 对比拟合圆与实际轮廓偏差
% 5. 输出结果
if (|Defects| > 0)
disp_message (WindowHandle, 'NG', 'window', 12, 12, 'red', 'true')
else
disp_message (WindowHandle, 'OK', 'window', 12, 12, 'green', 'true')
endif
四、性能优化技巧
1. 减少处理区域
% 错误:全图处理
detect_suspicious_regions (Image, ...)
% 正确:先定位,再处理 ROI
reduce_domain (Image, SearchRegion, ImageReduced)
detect_suspicious_regions (ImageReduced, ...)
2. 图像金字塔加速
find_shape_model (Image, ModelID, -0.2, 0.2, 0.5, 1, 0.9, 'least_squares', 0, 1.2, Row, Column, Angle, Score)
% 设置 min_score 和 pyramid 级别平衡速度与精度
3. 避免频繁创建对象
% 错误:循环内创建
for i := 1 to 1000 by 1
create_shape_model (...)
endfor
% 正确:循环外创建一次
create_shape_model (...)
for i := 1 to 1000 by 1
find_shape_model (...)
endfor
五、常见坑与解决方案
| 问题 | 原因 | 解决 |
|---|---|---|
| 定位不稳定 | 模板特征太少 | 增加训练图片,覆盖不同角度/光照 |
| 检测速度慢 | 全图搜索 | 先用粗定位缩小 ROI |
| 误检率高 | 阈值固定 | 用动态阈值或深度学习 |
| 边缘跳变 | 亚像素未开启 | 启用亚像素边缘提取 (edges_sub_pix) |
| 通信延迟 | 每次新建连接 | 复用相机句柄和窗口句柄 |
六、Halcon vs OpenCV
| 对比项 | Halcon | OpenCV |
|---|---|---|
| 精度 | 亚像素级,工业级 | 像素级,够用 |
| 稳定性 | 商业支持,长期维护 | 社区维护,版本迭代快 |
| 开发效率 | 算子封装好,上手快 | 需要自己实现算法 |
| 成本 | 商业授权(贵) | 免费开源 |
| 适用场景 | 工业检测、高精度测量 | 互联网、科研、原型验证 |
建议: 工业项目优先 Halcon,预算有限或研究型项目用 OpenCV。
七、学习路线建议
第 1 周:HDevelop 基础语法 + 图像采集
第 2 周:预处理 + 阈值分割 + 形态学
第 3 周:模板匹配 + 定位
第 4 周:测量 + OCR + 缺陷检测
第 5 周:C#/C++ 联合编程
第 6 周:实战项目 + 性能优化
资源推荐:
- 官方示例(最权威)
- Halcon 论坛(问题排查)
- 《Halcon 机器视觉算法原理与编程实战》
结语
Halcon 的强大不在于算子多,而在于工业级的稳定性和可复现性。记住三点:
- 先定位再检测 — 避免全图搜索
- 参数要调优 — 不要直接用默认值
- 测试要覆盖 — 光照、角度、产品批次变化都要测
视觉项目没有"银弹",只有不断迭代和优化。
如果这篇文章对你有帮助,欢迎留言交流你的 Halcon 实战经验。 🌿
更多推荐


所有评论(0)