Halcon测量入门

在机器视觉中,测量是必不可少的一个分支。测量主要包括有物体大小的测量、距离的测量以及物体完整度检测等。在工业机器视觉里面常用的有1D测量和2D测量,两种测量方式都非常简单好用,不过大部分的测量都是要基于标定之后(需要获取环境参数,比如得到pixel的物理大小)不经过标定的测量都只是测量物体的相对大小,以下讲解的都是没有获得相对物理大小的测量方式,原理都一样两者只不过进行单位换算的差别。

1D测量:

1D测量主要就是拉个框获取这个框中定义的高频范围的临界点,所测量的范围比较有限,基于两点之间的距离。

1D测量主要步骤有:1、自定义测量模型;2、创建测量句柄 ;3、开始测量;4、显示测量结果;5、清除测量句柄

例子:

被测物:

halcon代码:

read_image (Image, 'D:/Halcon-WorkSpaces/Halcon-Demo/测量/卡尺测量/1D测量/Image/test1.png')
rgb1_to_gray (Image, GrayImage)
get_image_size (GrayImage, Width, Height)
*计算尺子与像素点大小的关系
dev_set_draw ('margin')
*选则测量区域
draw_rectangle2 (3600, Row, Column, Phi, Length1, Length2)
*显示测量区域
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
*创建侧脸句柄
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, 'nearest_neighbor', MeasureHandle)
*开始测量
measure_pos (GrayImage, MeasureHandle, 1, 30, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance)
*显示抓取的点
gen_cross_contour_xld (Cross, RowEdge, ColumnEdge, 20, 0.5)
*显示测量结果
set_display_font (3600, 50, 'mono', 'true', 'false')
disp_message (3600, '测量长度:'+Distance+' Pixle', 'window', 12, 12, 'green', 'false')
*清除测量句柄
close_measure (MeasureHandle)

测量结果:

2D测量:

2D测量又称之为几何测量,可根据几何模型对物体进行较为全面的测量。

2D测量的步骤有:1、创建测量句柄;2、设置图片相对大小到句柄;3、定义测量模型;4、将测量模型添加到句柄;5、开始测量;6、拟合被测模型;7、显示测量结果;8、清除测量句柄。

例子:

被测物:

halcon代码:

read_image (Image, 'D:/Halcon-WorkSpaces/Halcon-Demo/测量/卡尺测量/2D测量/Image/test2.png')
rgb1_to_gray (Image, GrayImage)
*创建几何测量句柄
create_metrology_model (MetrologyHandle)
*设置句柄与图像的像素关系
get_image_size (Image, Width, Height)
set_metrology_model_image_size (MetrologyHandle, Width, Height)
*自定义椭圆模型
draw_ellipse (3600, Row, Column, Phi, Radius1, Radius2)
*添加椭圆模型
*卡边尺长
MeasureLength1:=30
*卡边尺宽
MeasureLength2:=5
add_metrology_object_ellipse_measure (MetrologyHandle, Row, Column, Phi, Radius1, Radius2, 30, 5, 1, 30, [], [], Index)
*显示卡边尺模型
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)
*开始测量
apply_metrology_model (GrayImage, MetrologyHandle)
*显示提取到的轮廓线
get_metrology_object_result_contour (Contour, MetrologyHandle, 'all', 'all', 1.5)
*拟合,计算轮廓结果
fit_ellipse_contour_xld (Contour, 'fitzgibbon', -1, 0, 0, 200, 3, 2, Row1, Column1, Phi1, Radius1, Radius2, StartPhi, EndPhi, PointOrder)
*显示结果
*椭圆的中心点
gen_cross_contour_xld (Cross, Row1, Column1, Radius1*2, Phi1)
set_display_font (3600, 30, 'mono', 'true', 'false')
disp_message (3600, ['椭圆中心坐标:('+Row1+','+Column1+')','椭圆斜率:'+Phi1,'椭圆最大半长:'+Radius1,'椭圆最小半长:'+Radius2], 'window', 12, 112, 'green', 'false')
*清除句柄
clear_metrology_model (MetrologyHandle)


测量结果:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值