【大家好,我是机器视觉_Explorer,持续分享机器视觉相关项目和案例,分享机器视觉相关技术,欢迎一起交流!】
本文使用halcon实现鼠标擦除的功能,可用于优化创建模板。
- 框选模板

- 区域擦除
上述创建的模板区域有很多干扰,我们想去除,比如只提取芯片区域,进行鼠标擦除

- 区域擦除后的模板

-
源码
用鼠标擦除后的区域创建模板
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_set_draw('margin')
read_image (Image, 'printer_chip/printer_chip_01')
*选择区域
disp_message (WindowHandle, '框选一个区域,右键结束', 'window', 12, 12, 'red', 'false')
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
reduce_domain (Image, Rectangle, ImageReduced)- dev_clear_window ()
dev_display (ImageReduced)
dev_display(Rectangle)
dev_set_draw('fill')
橡皮擦功能,特征屏蔽*********************************
*橡皮擦大小
EraserSize:=50
*橡皮擦形状
EraserType:='rectangle'
gen_empty_obj(region_removeds)
*橡皮擦路过的坐标集
Rows := []
Cols := []
*擦除工作
Button:=0
set_display_font (WindowHandle, 26, 'mono', 'true', 'false')
disp_message (WindowHandle, '按下鼠标进行擦除功能,松开鼠标将结束', 'window', 12, 12, 'red', 'false')
while (Button == 0)
get_mbutton (WindowHandle, Row, Column, Button)
while (Button == 1)
get_mposition (WindowHandle, Row, Column, Button)
Rows := [Rows,Row]
Cols := [Cols,Column]
*生成橡皮擦擦过的区域
if(EraserType=='rectangle')
gen_rectangle2 (Eraser,Row, Column,0, EraserSize,EraserSize)
else
gen_circle (Eraser, Row, Column, EraserSize)
endif
*橡皮擦区域合并
union2(region_removeds,Eraser,region_removeds)
endwhile
endwhile
*区域相减
difference (ImageReduced, region_removeds, RegionDifference)
reduce_domain (ImageReduced, RegionDifference, ImageReduced)
创建模板****************************************************
create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
find_shape_model (Image, ModelID, rad(-180), rad(180), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
*获取模板轮廓
get_shape_model_contours (ModelContours, ModelID, 1)
dev_clear_window ()
dev_display (Image)
dev_set_line_width (2)
*将模板映射到目标上
vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2D)
affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2D) - dev_clear_window ()