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)