halcon之卡尺
(2019-04-14 20:09:56)分类: 2019年 |
使用了模板定位+卡尺跟随测量 角度
read_image (Image1,
'1'+Index)
rgb1_to_gray (Image1,
GrayImage1)
find_scaled_shape_model
(GrayImage1, ModelID, rad(0), rad(360), 0.9, 1.1, 0.5, 1, 0.5,
'least_squares', 0, 0.9, Row, Column, Angle, Scale, Score)
*vector_angle_to_rigid
(0, 0, 0, Row, Column, Angle, HomMat2D)
*affine_trans_contour_xld (ModelContours, ContoursAffinTrans,
HomMat2D)
if
(Score>0)
*模板匹配+仿射变换
vector_angle_to_rigid
(Row, Column, Angle, Row1, Column1, 0, HomMat2D1)
affine_trans_image
(GrayImage1, ImageAffinTrans, HomMat2D1, 'constant', 'false')
*找到新图的参考点
reduce_domain
(ImageAffinTrans, Rectangle, ImageReduced2)
threshold
(ImageAffinTrans, Regions2, 0, 83)
get_region_points
(Regions2, Rows, Columns)
*设置跟随坐标(变量设置一样)
align_metrology_model
(MetrologyHandle, Rows[0], Columns[0], 0)
*测量
apply_metrology_model
(ImageAffinTrans, MetrologyHandle)
*获取结果
get_metrology_object_result (MetrologyHandle, 'all', 'all',
'result_type', 'all_param', Parameter)
*求角度
angle_ll (Parameter[0],
Parameter[1], Parameter[2], Parameter[3], Parameter[4],
Parameter[5], Parameter[6], Parameter[7], Angle)
Angle :=
deg(Angle)
*拟合后的轮廓
get_metrology_object_result_contour (RContour, MetrologyHandle,
'all', 'all', 1.5)
*求两线段的交点
intersection_lines
(Parameter[0], Parameter[1], Parameter[2], Parameter[3],
Parameter[4], Parameter[5], Parameter[6], Parameter[7], Row2,
Column2, IsOverlapping)
*线段1角度
line_orientation
(Parameter[0], Parameter[1], Parameter[2], Parameter[3], Phi)
*
if
(Phi > 0)
Phi:= Phi - rad(180)
endif
*线段2角度
line_orientation (
Parameter[4], Parameter[5], Parameter[6], Parameter[7], Phi1)
*圆弧轮廓
gen_circle_contour_xld
(ContCircle, Row2, Column2, 18, Phi, Phi1, 'positive', 1)
*测量矩形
get_metrology_object_measures (Contour, MetrologyHandle, 'all',
'all', MRow, MColumn)
*十字架
gen_cross_contour_xld
(Cross, MRow, MColumn, 6, rad(45))
*显示
dev_display
(Image1)
stop ()
dev_display
(ImageAffinTrans)
stop ()
dev_set_line_width
(1)
dev_set_color
('yellow')
dev_display
(Contour)
stop ()
dev_set_color
('red')
dev_display
(Cross)
stop ()
dev_set_line_width
(2)
dev_set_color
('green')
dev_display
(RContour)
stop ()
dev_set_color
('blue')
dev_display
(ContCircle)
*
disp_message
(WindowHandle, 'Angle = ' + Angle$'.5' + '°', 'window', 12, 12,
'black', 'true')
if (Index < 3)
disp_continue_message (WindowHandle, 'black',
'true')
endif
stop
()
endif
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*************************定位模板
read_image (Image,
'C:/Users/mogd3/Desktop/卡尺+定位/11.jpg')
get_image_size (Image, Width, Height)
*
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 0, 110)
dilation_circle (Regions, RegionDilation, 3)
reduce_domain (GrayImage, RegionDilation, ImageReduced)
area_center (RegionDilation, Area, Row1, Column1)
*
inspect_shape_model (ImageReduced, ModelImages, ModelRegions,
4, 30)
create_scaled_shape_model (ImageReduced, 4, rad(0), rad(360),
'auto', 0.8, 1.3, 'auto', 'auto', 'ignore_global_polarity', 20, 30,
ModelID)
get_shape_model_contours (ModelContours, ModelID, 1)
stop ()
**********************卡尺模板
*起点的行列
SRow:=[41,41]
SClon:=[98,98]
*终点的行列
MRow:=[70,70]
MClon:=[79,115]
*半宽
releght:=15
**
**创建模型
create_metrology_model (MetrologyHandle)
*设置大小
set_metrology_model_image_size (MetrologyHandle, Width,
Height)
*放置卡尺
add_metrology_object_line_measure (MetrologyHandle,SRow,
SClon,MRow,MClon,10, 5, 1, 30, [], [], Index1)
*************************设置参考点
gen_rectangle1 (Rectangle, SRow[0]-25, SClon[0]-30,SRow[0]+30,
SClon[0]+30)
reduce_domain (GrayImage, Rectangle, ImageReduced1)
threshold (ImageReduced1, Regions1, 0, 56)
get_region_points (Regions1, Rows, Columns)
*设置跟随点
set_metrology_model_param (MetrologyHandle,
'reference_system', [Rows[0], Columns[0],0])
for Index := 1 to 3 by 1
endfor
clear_metrology_model (MetrologyHandle)
前一篇:4月8训练识别
后一篇:halcon之跟随定位测量