使用move_region算子右移区域590列后返回空区域的问题咨询
move_region移动区域后返回空区域的解决办法
问题代码
union1 (Regions, Regions) move_region(Regions, RegionMoved, 0, 590) connection(RegionMoved, ConnectedRegions)
原区域信息
- 面积:15653
- 中心坐标:783.516, 148.932(注:Halcon中坐标格式为「行, 列」,即行坐标148.932,列坐标783.516)
- 区域形态:一个位于图像左侧的不规则形状区域,占据较多列范围
问题原因
move_region移动后的区域完全超出了当前图像的边界范围,因此返回空区域。你的区域中心列坐标为783.5,向右移动590列后,中心列坐标变为783.5 + 590 = 1373.5。如果当前图像的宽度小于1373.5,或者区域原本的右边缘加上590后超出图像宽度,整个区域就会完全移出画布,导致算子返回空。
解决步骤
- 检查图像尺寸:使用
get_image_size算子获取当前图像的宽度(列数),确认移动后的区域是否在图像范围内:
get_image_size(Image, Width, Height)
- 调整偏移量:如果图像宽度不足,减小列偏移值,确保移动后的区域至少有一部分处于图像边界内;如果只需保留部分区域,可直接处理返回的非空区域结果。
- 扩展图像画布:若需要完整保留移动后的区域,先创建更大尺寸的空白图像,将原区域绘制到新图像后再执行移动操作:
// 生成比原图像宽600的空白图像 gen_image_const(NewImage, 'byte', Width + 600, Height) // 将原区域绘制到新图像上 paint_region(Regions, NewImage, NewImage, 255, 'fill') // 执行移动操作 move_region(Regions, RegionMoved, 0, 590)
内容的提问来源于stack exchange,提问作者Vincenzo La Forgia
相关产品推荐
相关产品推荐

