Halcon学习笔记之测量系列-卡尺测量

介绍完简单的一维测量之后,下面我们来介绍下常用的卡尺测量。Halcon中的Metrology方法即为卡尺工具,可用来拟合线,圆,这种方法对于目标比背景很明显的图像尺寸测量是很方便的,不需要用blob进行边缘提取等,但缺点也很明显,需要目标的相对位置基本不变才行。大致的步骤如图所示:
在这里插入图片描述
下面我直接用代码来演示,如何用halcon进行卡尺测量。供测量用的图像如下。
在这里插入图片描述
代码如下:

read_image (Image, 'C:/Users/Administrator/Desktop/卡尺.png')
rgb1_to_gray (Image, GrayImage)
*上来我们就先创建测量句柄,供后面使用
create_metrology_model (MetrologyHandle)
get_image_size (GrayImage, Width, Height)
*测量窗口制作
draw_line (3600, Row1, Column1, Row2, Column2)
gen_region_line (RegionLines, Row1, Column1, Row2, Column2)
draw_line (3600, Row3, Column3, Row4, Column4)
gen_region_line (RegionLines1, Row3, Column3, Row4, Column4)
stop()
*添加测量对象,设置测量区域大小
set_metrology_model_image_size (MetrologyHandle, Width, Height)
*添加直线对象到测量模型中
Line1:=[Row1, Column1, Row2, Column2]
Line2:=[Row3, Column3, Row4, Column4]
add_metrology_object_generic (MetrologyHandle, 'line', [Line1,Line2], 45, 10, 1, 15, [], [], Index)
*获取测量模型里的模型轮廓
get_metrology_object_model_contour (Contour, MetrologyHandle, 'all', 1.5)
*获取测量模型里的测量区域
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)
dev_display (GrayImage)
dev_display (Contours)

初步效果如图:
在这里插入图片描述
这里是为了准备好要找出的两个边的区域来画出两条线,为之后的设置测量区域做准备。

*测量并对测量区域拟合几何形状
apply_metrology_model (GrayImage, MetrologyHandle)
*获取测量结果里的开始行坐标
get_metrology_object_result (MetrologyHandle, Index, 'all', 'result_type', 'row_begin', RowBegin)
*获取测量结果里的开始列坐标
get_metrology_object_result (MetrologyHandle, Index, 'all', 'result_type', 'column_begin', ColBegin)
*获取测量结果里的结束行坐标
get_metrology_object_result (MetrologyHandle, Index, 'all', 'result_type', 'row_end', RowEnd)
*获取测量结果里的结束列坐标
get_metrology_object_result (MetrologyHandle, Index, 'all', 'result_type', 'column_end', ColEnd)
*获取测量区域
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)
*获取测量结果轮廓
get_metrology_object_result_contour (MeasuredLines, MetrologyHandle, 'all', 'all', 1.5)
*显示测量区域和测量结果轮廓
dev_display (GrayImage)
dev_set_color ('green')
dev_display (Contours)
dev_set_color ('blue')
dev_display (MeasuredLines)
*生成两个直线对象并弄到一个区域里面
*count_obj (MeasuredLines, Number)
gen_empty_obj (LineRegion)
for i := 0 to |RowBegin|-1 by 1 
    gen_region_line (RegionL, RowBegin[i], ColBegin[i], RowEnd[i], ColEnd[i])
    concat_obj (LineRegion, RegionL, LineRegion)
endfor
*ji'suan两线之间的距离
select_obj (LineRegion, First, 1)
select_obj (LineRegion, Second, 2)
distance_rr_min (First, Second, MinDistance, Row11, Column11, Row21, Column21)
clear_metrology_model (MetrologyHandle)

最后效果图如下:
在这里插入图片描述
最终求得的两条线的距离是:
在这里插入图片描述
以上呢就是halcon中卡尺测量的大致实现步骤。

  • 6
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小丶锦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值