halcon模板匹配、由点生成线应用
1、图片链接:https://pan.baidu.com/s/1ZTenkUDgiDIBCYp-xFwV8A
提取码:4wv4
2、要求:
(1)利用果实和叶子制作模板并且定位(模板必须完整无分支干扰线);
(2)叶子和果实 重心通过仿射变换显示在logo上;
(3)计算叶子与果实重心连线基于模板重心的连线的角度;
3、代码实现:
dev_get_window (WindowHandle)
read_image (Image, './logo/1.jpg')
flag:=1
if(flag=0)
draw_rectangle1(WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (ROI_0, Row1, Column1, Row2, Column2)
reduce_domain (Image, ROI_0, ImageReduced)
create_shape_model(ImageReduced, 'auto', 0, rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
get_shape_model_contours(ModelContours, ModelID, 1)
dev_display (Image)
dev_set_draw('margin')
write_shape_model(ModelID,'model2.shm')
write_string(WindowHandle,'模板创建完毕!')
endif
if(flag=1)
for i:= 1 to 12 by 1
read_image (Image1, './logo/'+i+'.jpg')
read_shape_model('model2.shm', ModelID)
get_shape_model_contours (ModelContours, ModelID, 1)
find_shape_model(Image1, ModelID, 0, rad(360), 0.3, 1, 0.5, 'least_squares', 0, 0.1, Row, Column, Angle, Score)
if(Score>0.4)
vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2D)
affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2D)
gen_cross_contour_xld (Cross, Row, Column, 36, Angle)
scale_image (Image1, ImageScaled, 1.78322, -200)
threshold (ImageScaled, Regions, 240, 255)
connection (Regions, ConnectedRegions)
*果实区域
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 67970.2, 1e+06)
reduce_domain (ImageScaled, SelectedRegions, ImageReduced1)
area_center (SelectedRegions, Area, Row1, Column1)
gen_cross_contour_xld (Cross1, Row1, Column1, 36, Angle)
*叶子区域
select_shape (ConnectedRegions, SelectedRegions1, ['area','circularity'], 'and', [19553.1,0.05092], [343575,0.5])
area_center (SelectedRegions1, Area1, Row2, Column2)
gen_cross_contour_xld (Cross2, Row2, Column2, 36, Angle)
*果实中心点和叶子中心点的连线
gen_region_line (RegionLines1, Row2, Column2, Row1, Column1)
*
gen_region_line (RegionLines2, Row2, Column2, Row, Column)
********************************
dev_display (Image1)
dev_set_color ('green')
dev_display (ContoursAffinTrans)
*模板匹配中心点
dev_set_color ('green')
dev_display (Cross)
*果实区域中心点
dev_set_color ('red')
dev_display (Cross1)
*叶子区域
dev_set_color ('black')
dev_display (Cross2)
*
dev_set_color ('red')
dev_display (RegionLines1)
dev_set_color ('green')
dev_display (RegionLines2)
****
disp_message (WindowHandle, 'OK', 'window', 12, 12, 'green', 'true')
else
disp_message (WindowHandle, 'NG 模板匹配失败', 'window', 12, 12, 'red', 'true')
endif
clear_shape_model(ModelID)
stop ()
endfor
endif
4、效果图