Halcon 圆测量与直线测量

read_image Image, 'test.bmp')
get_image_size Image, Width, Height)
dev_close_window )
dev_open_window 0, 0, Width/2, Height/2, 'black', WindowHandle)
dev_display Image)
dev_set_draw 'margin')
draw_line WindowHandle, Row1, Column1, Row2, Column2)
draw_circle WindowHandle, Row, Column, Radius)
*【输入】
StartRow:=Row1
StartCol:=Column1
EndRow:=Row2
EndCol:=Column2
*卡尺宽度
RuleWidth:=40
*卡尺高度
RuleHeight:=1
*卡尺阈值
RuleThd:=5
*卡尺间隔
RuleSpace:=2
*搜索模式
RuleMode:='negative'
*点选择
RuleSeleP:='all'
*【输出】
LineRow0:=0
LineCol0:=0
LineRow1:=0
LineCol1:=0
PointRows:=[]
PointCols:=[]

MeasureLine Image, Contours, Rectangle, StartRow, StartCol, EndRow, EndCol, RuleWidth, RuleHeight, RuleSpace, RuleThd, RuleSeleP, RuleMode, PointRows, PointCols, LineRow0, LineCol0, LineRow1, LineCol1)

MeasureCircle Image, Contours, Row, Column, Radius, RuleWidth, RuleHeight, RuleSpace, RuleThd, RuleSeleP, RuleMode, PointRows, PointCols, CircleRow, CircleCol, CircleRad)

*显示
dev_display Image)
dev_display Rectangle)
dev_set_color 'spring green')
dev_display Contours)
dev_set_color 'orange')
gen_cross_contour_xld Cross, PointRows, PointCols, 6, 0.785398)
dev_set_color 'red')
gen_circle_contour_xld ContCircle, CircleRow, CircleCol, CircleRad, 0, 6.28318, 'positive', 1)
gen_contour_polygon_xld Contour, [LineRow0,LineRow1], [LineCol0,LineCol1])

main

*直线测量
create_metrology_model MetrologyHandle)
add_metrology_object_line_measure MetrologyHandle, StartRow, StartCol, EndRow, EndCol, 100, 20, 1, 30, [], [], Index)
*搜索宽度
set_metrology_object_param MetrologyHandle, Index, 'measure_length1', RuleWidth)
*有效搜索高度
set_metrology_object_param MetrologyHandle, Index, 'measure_length2', RuleHeight)
*搜索间隔
set_metrology_object_param MetrologyHandle, Index, 'measure_distance', RuleSpace)
*边缘阈值
set_metrology_object_param MetrologyHandle, Index, 'measure_threshold', RuleThd)
*边缘选择
set_metrology_object_param MetrologyHandle, Index, 'measure_select',RuleSeleP)
*过度方式
set_metrology_object_param MetrologyHandle, Index, 'measure_transition', RuleMode)
*对图像进行测量
apply_metrology_model Image, MetrologyHandle)
*测量点
get_metrology_object_measures Contours, MetrologyHandle, Index, RuleMode, PointRows, PointCols)
*测量直线
get_metrology_object_result MetrologyHandle, Index, 'all', 'result_type', ['row_begin', 'column_begin', 'row_end', 'column_end'], Parameter)
*外围矩形
angle_lx StartRow, StartCol, EndRow, EndCol, Angle)
length1:=sqrtStartCol-EndCol)*StartCol-EndCol)+StartRow-EndRow)*StartRow-EndRow))
gen_rectangle2 Rectangle, StartRow+EndRow)/2, StartCol+EndCol)/2, Angle, length1/2, RuleWidth)
LineRow0:=Parameter[0]
LineCol0:=Parameter[1]
LineRow1:=Parameter[2]
LineCol1:=Parameter[3]
return )

MeasureLine

*圆测量
create_metrology_model MetrologyHandle)
add_metrology_object_circle_measure MetrologyHandle, Row, Column, Radius, 20, 5, 1, 30, [], [], Index)
*搜索宽度
set_metrology_object_param MetrologyHandle, Index, 'measure_length1', RuleWidth)
*有效搜索高度
set_metrology_object_param MetrologyHandle, Index, 'measure_length2', RuleHeight)
*搜索间隔
set_metrology_object_param MetrologyHandle, Index, 'measure_distance', RuleSpace)
*边缘阈值
set_metrology_object_param MetrologyHandle, Index, 'measure_threshold', RuleThd)
*边缘选择
set_metrology_object_param MetrologyHandle, Index, 'measure_select',RuleSeleP)
*过度方式
set_metrology_object_param MetrologyHandle, Index, 'measure_transition', RuleMode)
*对图像进行测量
apply_metrology_model Image, MetrologyHandle)
*测量点
get_metrology_object_measures Contours, MetrologyHandle, Index, RuleMode, PointRows, PointCols)
*测量圆
get_metrology_object_result MetrologyHandle, Index, 'all', 'result_type', ['row', 'column', 'radius'], Parameter)
CircleRow:=Parameter[0]
CircleCol:=Parameter[1]
CircleRad:=Parameter[2]
return )

MeasureCircle

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注