Halcon 入门教程:卡尺工具(Measure)详解与实战应用
文章目录
- 🚀 Halcon 入门教程:卡尺工具(Measure)详解与实战应用
- 📘 一、什么是卡尺工具?
- 🧩 二、卡尺工具的工作流程
- 🛠️ 三、关键函数详解
- 1. `gen_measure_rectangle2`
- 2. `measure_pos`
- 3. `close_measure`
- 📷 四、应用案例:测量电池宽度是否合格
- 📋 场景描述:
- 📍 实战步骤:
- 📋 halcon图形化工具:
- 📊 五、参数调节建议
- 🎯 六、典型应用场景
- 🔚 七、总结
🚀 Halcon 入门教程:卡尺工具(Measure)详解与实战应用
在工业视觉检测中,尺寸测量 是非常常见也是非常重要的一类任务,比如:
- 检测零件的外径是否合格
- 判断孔位的位置是否偏移
- 检查产品宽度是否在公差范围内
Halcon 提供了强大的 卡尺工具(Measure工具) 来帮助我们完成精确测量工作。本文将带你深入理解卡尺工具的使用原理、常见函数,并通过一个完整案例演示如何使用卡尺工具测量零件边缘位置。
📘 一、什么是卡尺工具?
卡尺工具的本质是 沿着一条测量线或测量矩形区域,寻找边缘点并返回亚像素级的边缘坐标。
它主要依赖于以下几个函数:
Halcon函数 | 功能 |
---|---|
gen_measure_rectangle2 | 创建卡尺模型(测量对象) |
measure_pos | 沿卡尺模型查找边缘点 |
close_measure | 释放卡尺模型资源 |
🧩 二、卡尺工具的工作流程
以下是使用 Halcon 卡尺工具的标准流程图:
1. 创建图像 → 2. 创建测量区域 → 3. 建立卡尺模型 → 4. 查找边缘 → 5. 获取位置结果 → 6. 可视化与计算
🛠️ 三、关键函数详解
1. gen_measure_rectangle2
作用: 创建一个用于测量的矩形区域(卡尺)
gen_measure_rectangle2(Row, Column, Phi, Length1, Length2, Width, Height, 'bilinear', MeasureHandle)
Row
,Column
:矩形中心坐标Phi
:角度(弧度)Length1
,Length2
:半宽半高(即测量区域尺寸)Width
,Height
:图像宽高'bilinear'
:插值方式(一般选 bilinear)- 返回
MeasureHandle
:卡尺模型句柄
2. measure_pos
**作用:在测量区域中查找边缘点(通常是亮→暗、暗→亮的跳变点)
measure_pos(Image, MeasureHandle, Sigma, Threshold, 'positive', 'first', RowEdge, ColumnEdge, Amplitude, Distance)
Sigma
:边缘检测的高斯平滑系数,建议范围 1~2Threshold
:边缘对比度阈值'positive'
/'negative'
/'all'
:检测边缘类型'first'
/'last'
/'all'
:检测边缘数量- 返回:亚像素级的
RowEdge
,ColumnEdge
3. close_measure
释放测量句柄,避免内存泄露。
close_measure(MeasureHandle)
📷 四、应用案例:测量电池宽度是否合格
📋 场景描述:
某锂电池产品要求外壳宽度在 30 ± 0.2mm,拍摄图像后需要通过视觉系统测量实际宽度。
📍 实战步骤:
* 1. 读取图像
read_image(Image, 'battery.png')* 2. 创建卡尺测量区域
Row := 250
Column := 300
Phi := 0
Length1 := 5 * 垂直方向测量厚度
Length2 := 100 * 水平方向的长度
get_image_size(Image, Width, Height)gen_measure_rectangle2(Row, Column, Phi, Length1, Length2,Width, Height, 'bilinear', MeasureHandle)* 3. 查找边缘点(例如电池左右两边)
Sigma := 1.5
Threshold := 30
measure_pos(Image, MeasureHandle, Sigma, Threshold,'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance)* 4. 计算边缘间距(电池宽度)
* 假设返回两个边缘点
if |ColumnEdge| >= 2Width_Pixel := abs(ColumnEdge[1] - ColumnEdge[0])* 假设像素对应 0.01 mmWidth_mm := Width_Pixel * 0.01disp_message(WindowHandle, 'Battery Width: ' + Width_mm$'.2f' + ' mm', 'window', 10, 10, 'black', 'true')
endif* 5. 清除资源
close_measure(MeasureHandle)
📋 halcon图形化工具:
我们可以看到,在halcon中提供了若干助手,其中就包括了卡尺工具,用于以图形化的形式实现边缘提取:
打开后我们就可以选择感兴趣区域,用于提取边缘,就像之前代码里面运行的那样,而参数就是以下的参数
📊 五、参数调节建议
参数 | 建议值 | 说明 |
---|---|---|
Sigma | 1.0 ~ 2.0 | 越大越平滑,但会降低精度 |
Threshold | 根据实际边缘对比度调整 | 边缘不清晰时要适当降低 |
Length1 | 5~10 像素 | 决定卡尺厚度,避免夹杂杂点 |
🎯 六、典型应用场景
应用场景 | 示例 |
---|---|
机械尺寸检测 | 电池宽度、轴径、间距 |
产品位置校准 | 插槽、孔位、焊点中心位置 |
缺陷检测辅助 | 先找边再确定缺陷边界 |
🔚 七、总结
卡尺工具是 Halcon 中非常实用的一项测量工具,具有:
- 高精度(亚像素级别)
- 高鲁棒性(通过平滑和阈值控制)
- 易于部署(仅需指定测量区域和参数)
对于工业视觉检测任务中涉及尺寸测量的场景,掌握 Halcon 的卡尺工具将显著提升你的项目开发效率和测量准确性。
如果你是 Halcon 初学者,建议动手尝试本文案例中的代码,调节参数观察效果,相信你很快就能掌握卡尺工具的使用精髓!
📩 有任何问题或希望我继续写其它 Halcon 工具的教学,也欢迎留言交流!