模板匹配 -擦除功能
Halcon开发一个类似于康耐视橡皮功能:
本质就是抠图,减法
union2(Region1, Region2 : RegionUnion : : )
union2()——将两个区域合并成一个整体,仅限两个
函数原型:union2(Region1(输入), Region2(输入) : RegionUnion(输出) : : )
功能:将Region2 和Region1元组内的区域合并成一个独立的区域保存于RegionUnion 。把第二个参数Region2里的所有区域合并,然后将合并后的区域分别与Region1中的每一个区域进行合并,然后保存到RegionUnion 中。最后,RegionUnion 元素个数与Region1元素个数相同。
参数:
Region1 (input_object) ——要与Region2中的所有区域的并集计算的区域
Region2 (input_object) ——要添加到Region1的区域
RegionUnion (output_object) ——最终得到的区域
要素数::RegionUnion == Region1
difference(Region, Sub : RegionDifference : : )
*先计算两个区域的交集
*1.如果有交集,结果为第一个区域减去交集
*2.如果没有交集,结果为第一个区域
下面从网上抄下来的一段代码
1 read_image (Image, 'printer_chip/printer_chip_01') 2 *选择区域 3 draw_rectangle1 (200000, Row1, Column1, Row2, Column2) 4 gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2) 5 reduce_domain (Image, Rectangle, ImageReduced) 6 dev_clear_window () 7 dev_display (ImageReduced) 8 **橡皮擦功能,特征屏蔽*********************************** 9 *橡皮擦大小 10 EraserSize:=10 11 *橡皮擦形状 12 EraserType:='rectangle' 13 gen_empty_obj(region_removeds) 14 *橡皮擦路过的坐标集 15 Rows := [] 16 Cols := [] 17 *擦除工作 18 Button:=0 19 set_display_font (200000, 26, 'mono', 'true', 'false') 20 disp_message (200000, '按下鼠标进行擦除功能,松开鼠标将结束', 'window', 12, 12, 'red', 'false') 21 while (Button == 0) 22 get_mbutton (200000, Row, Column, Button) 23 while (Button == 1) 24 get_mposition (200000, Row, Column, Button) 25 Rows := [Rows,Row] 26 Cols := [Cols,Column] 27 *生成橡皮擦擦过的区域 28 if(EraserType=='rectangle') 29 gen_rectangle2 (Eraser,Row, Column,0, EraserSize,EraserSize) 30 else 31 gen_circle (Eraser, Row, Column, EraserSize) 32 endif 33 *橡皮擦区域合并 34 union2(region_removeds,Eraser,region_removeds) 35 endwhile 36 endwhile 37 *区域相减 38 difference (ImageReduced, region_removeds, RegionDifference) 39 reduce_domain (ImageReduced, RegionDifference, ImageReduced) 40 41 **创建模板****************************************************** 42 create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID) 43 find_shape_model (Image, ModelID, rad(-180), rad(180), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score) 44 *获取模板轮廓 45 get_shape_model_contours (ModelContours, ModelID, 1) 46 dev_clear_window () 47 dev_display (Image) 48 dev_set_line_width (2) 49 *将模板映射到目标上 50 vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2D) 51 affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2D)