Halcon 拼图算子tile_images_offset详解

tile_images_offset

原型

tile_images_offset(Images : TiledImage : OffsetRow, OffsetCol, Row1, Col1, Row2, Col2, Width, Height : )

功能

根据明确的位置信息将多张图像拼接成一张大图像

参数列表

Images (input_object):输入图像
TiledImage (output_object):拼接后图像
OffsetRow (input_control):拼接后图像中输入图像左上角的行坐标
OffsetCol (input_control):拼接后图像中输入图像左上角的列坐标
Row1 (input_control):裁切图像左上角行坐标
Col1 (input_control):裁切图像左上角列坐标
Row2 (input_control):裁切图像右下角行坐标
Col2 (input_control):裁切图像右下角列坐标
Width (input_control):拼接后图像宽
Height (input_control):拼接后图像高

详解

算子tile_images_offset将通道数相同的多张图像拼接成一张大图像,输入的图像组中的图像尺寸可能不相同。拼接后的图像和输入图像通道数一致,其尺寸大小由参数Width以及Height确定。输入图像在输出图像中的左上角的位置由参数OffsetRow和OffsetCol确定,这两个参数Tuple长度由输入图像个数决定。当然可以根据需要将输入图像裁减为任意大小的矩形,可根据参数Row1, Col1, Row2, and Col2 来设置裁切图像大小,如果这四个参数中的任何一个设置为-1,则不会裁切相应的输入图像,同样,这四个参数Tuple长度也是由输入图像个数决定。也可以通过参数OffsetRow和OffsetCol来裁切图像,但只是根据图像左上角平铺位置重叠来裁切图像(下面会举例具体说明)

举例

1、将一张完整图像裁切为若干小图像
完整图像
在这里插入图片描述
裁切成若干小图像
在这里插入图片描述
2、拼接图像
根据1中裁切的图像,将其重新拼接成一张完整的电路板图像
在这里插入图片描述
3、参数OffsetRow、OffsetCol单独举例说明
在这里插入图片描述

代码

1、将一张完整图像裁切为若干小图像

* 裁切图像步长
ReduceStep := 10
* 裁切保存图像名称
ReduceImageName := 100
* 裁切图像保存路径
ReduceImageSavePath := 'C:/Users/Administrator/Desktop/' + 'ReduceImageFile'
* 加载一张图像
read_image (Image, 'printer_chip/printer_chip_01')
* 获取图像尺寸大小
get_image_size (Image, ImageWidth, ImageHeight)
* 要裁切的图像个数
ReduceImageNums := ImageWidth / ReduceStep
* 裁切图像ROI
gen_rectangle1 (ROI, 0, 0, ImageHeight - 1, ReduceStep - 1)
* 判断文件夹是否存在,不存在创建,存在删除文件夹中的图像
file_exists (ReduceImageSavePath, FileExists)
if (not FileExists)
    make_dir (ReduceImageSavePath)
else
    DeleteAllFiles (ReduceImageSavePath)
endif
* 循环裁切图像
for Index := 1 to ReduceImageNums by 1
    reduce_domain (Image, ROI, ImageReduced)
    crop_domain (ImageReduced, ImagePart)    
    write_image (ImagePart, 'bmp', 0, ReduceImageSavePath + '/' + ReduceImageName)
    ReduceImageName := ReduceImageName + 1
    * 根据步长移动ROI
    move_region (ROI, ROI, 0, ReduceStep)    
endfor

2、拼接图像

* 加载文件夹下的所有图像路径信息
list_image_files ('C:/Users/Administrator/Desktop/ReduceImageFile', 'default', [], ImageFiles)
* 读取一张图像并获取尺寸
read_image (ReduceImage, ImageFiles[0])
get_image_size (ReduceImage, ReduceImageWidth, ReduceImageHeight)
* 根据图像尺寸生成一张像素值为0的图像
gen_image1 (TiledImage, 'byte', ReduceImageWidth, ReduceImageHeight, 0)
* 循环拼接图像(每次将上次拼接后的图像和新的图像一起作为输入,所以算子的参数都是成双的)
for Index := 0 to |ImageFiles| - 1 by 1    
    * 加载一张新的图像                                   
    read_image (Image, ImageFiles[Index])
    * 获取图像组(始终为两幅图像,一张是上次拼接后图像,一张是新加载的图像)
    concat_obj (TiledImage, Image, TiledImage)
    * 拼接图像  
    tile_images_offset (TiledImage, TiledImage, [0, 0],[0, ReduceImageWidth * Index], [0, 0], [0, 0], \
                        \
                        \
                        [ReduceImageHeight, ReduceImageHeight], [ReduceImageWidth * Index, ReduceImageWidth], \
                        \
                        \
                        ReduceImageWidth * (Index + 1), ReduceImageHeight)
endfor
write_image (TiledImage, 'bmp', 0, 'C:/Users/Administrator/Desktop/ReduceImageFile/' + 'tiledImage')

* OffsetRow、OffsetCol单独举例说明
get_image_size (TiledImage, TiledImageWidth, TiledImageHeight)
concat_obj (TiledImage, TiledImage, ObjectsConcat)
tile_images_offset (ObjectsConcat, TiledImageOut, [0, 0], [0, TiledImageWidth - 100], [-1, -1], [-1, -1], [-1, -1], [-1, -1], TiledImageWidth * 2 - 100, TiledImageHeight)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值