*----------------------------------------------------------------------------------------------------------------------
*基于形状模板匹配
*----------------------------------------------------------------------------------------------------------------------
*【1】读取文件中的数据
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'C:/Users/Public/Documents/MVTec/HALCON-19.11-Progress/examples/images/board/board.seq', '', 1, 2, AcqHandle)
grab_image (Image, AcqHandle)
get_image_pointer1 (Image, Pointer, Type, Width, Height)
get_image_size (Image, Width1, Height1)
*【2】窗体显示
rgb1_to_gray (Image, GrayImage)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
dev_set_part (0, 0, Height -1, Width-1)
dev_display (Image)
dev_set_color ('yellow')
dev_set_draw ('margin')
dev_set_line_width (2)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
disp_continue_message (WindowHandle, 'black', 'true')
*【3】绘制ROI区域
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (ROI, Row1, Column1, Row2, Column2)
dev_display (ROI)
*【4】抠图
reduce_domain (GrayImage, ROI, ImageReduced)
*【5】创建模板
*5.1 查看形状模板轮廓 塔等级8 对比度30
inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 8, 30)
dev_clear_window ()
dev_set_color ('blue')
dev_display (ModelRegions)
area_center (ModelRegions, Area, Row, Column)
count_obj (ModelRegions, Number)
for i := 1 to Number by 1
if (Area[i-1]>=15)
NumLeves:=i
endif
endfor
*5.2根据实际筛选选择的塔等级来创建形状模板
create_shape_model (ImageReduced, NumLeves, 0, rad(360), 'auto', 'none', 'use_polarity', 30, 10, ModelID)
get_shape_model_contours (ModelContours, ModelID, 1)
*【6】查找模板
for i := 1 to 20 by 1
grab_image (Image, AcqHandle)
find_shape_model (Image, ModelID, 0, rad(360), 0.7, 1, 0.5, 'least_squares', 0, 0.7, Row3, Column3, Angle, Score)
if (|Score|==1)
dev_set_color ('yellow')
vector_angle_to_rigid (0, 0, 0, Row3, Column3, Angle, HomMat2D)
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D)
dev_display (Image)
dev_display (ContoursAffineTrans)
endif
if(i!=20)
disp_continue_message (WindowHandle, 'black', 'true')
endif
stop ()
endfor
Halcon基于形状模板匹配 < inspect_shape_model>
最新推荐文章于 2024-01-23 20:01:45 发布