在51halcon上看到一个需求,需要将一张小图去背景后贴在大图的指定位置,通过博客启发,
PS:自己试验使用每个像素循环绘制方式发现效率太差改用博客使用的数组连续绘制的方式.
*读图read_image (Image, 'C:/Users/yoga/Desktop/测试图像/月亮.png')read_image (ImagePart, 'C:/Users/yoga/Desktop/测试图像/飞机.png')dev_update_off ()count_seconds (Seconds)*rgb分离decompose3 (Image, ImageR, ImageG, ImageB)decompose3 (ImagePart, ImagePartR, ImagePartG, ImagePartB)*获取目标点threshold (ImageR, Region, 128, 255)connection (Region, ConnectedRegions)select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)area_center (SelectedRegions, Area, Row, Column)*飞机去背景auto_threshold (ImagePartR, Regions1, 2)select_shape_std (Regions1, SelectedRegions1, 'max_area', 70)connection (SelectedRegions1, ConnectedRegions1)select_shape_std (ConnectedRegions1, SelectedRegions2, 'max_area', 70)difference (ImagePartR, SelectedRegions2, RegionDifference)connection (RegionDifference, ConnectedRegions2)select_shape_std (ConnectedRegions2, SelectedRegions3, 'max_area', 70)get_region_points (SelectedRegions3, PartRows, PartColumns)count:=|PartRows|startRs:=gen_tuple_const(count, Row)startCs:=gen_tuple_const(count, Column)*将所有像素坐标加上偏移量Rows:=startRs+PartRowsCols:=startCs+PartColumns*r绘制get_grayval (ImagePartR, PartRows, PartColumns, Grayval)copy_image (ImageR, DupImageR)set_grayval (DupImageR, Rows, Cols, Grayval)*g绘制get_grayval (ImagePartG, PartRows, PartColumns, Grayval1)copy_image (ImageG, DupImageG)set_grayval (DupImageG, Rows, Cols, Grayval1)*b绘制get_grayval (ImagePartB, PartRows, PartColumns, Grayval2)copy_image (ImageB, DupImageB)set_grayval (DupImageB, Rows, Cols, Grayval2)compose3 (DupImageR, DupImageG, DupImageB, MultiChannelImage)count_seconds (Seconds1)tt:=(Seconds1-Seconds)*1000
最后效果如下
下面是原图