zoukankan      html  css  js  c++  java
  • 简单拼接图像的tile_images和tile_images_offset算子

    有时候通常需要简单的拼图,不涉及图像融合之类的,仅仅是简单的平移将多张图拼接成一张图。tile_imagestile_images_offset就是用于简单拼图的2个算子。

    谈到拼图,肯定有以下问题要明确:

    1、将多少张图拼起来?由于是多张图,这需要一个元组来存储多张图片的集合。

    2、是横向拼图,还是纵向拼图?这涉及拼图的方向。

    3、是一张挨着一张无缝拼接吗?能不能做“有缝”的自由拼接?这涉及拼接偏移量。

    我有这样四张图(分辨率300 * 150):

    一、tile_images算子拼图

    算子签名:

    tile_images(Images : TiledImage : NumColumns, TileOrder : )

    其中:NumColumns指最终拼成的图有多少TileOrder指子图片排列的顺序——垂直方向还是水平方向

     1 read_image (Image1, '01.jpg')
     2 read_image (Image2, '02.jpg')
     3 read_image (Image3, '03.jpg')
     4 read_image (Image4, '04.jpg')
     5 
     6 get_image_size (Image2, Width, Height)
     7 gen_empty_obj (imgs)
     8 concat_obj (imgs, Image1, imgs)
     9 concat_obj (imgs, Image2, imgs)
    10 concat_obj (imgs, Image3, imgs)
    11 concat_obj (imgs, Image4, imgs)
    12 
    13 *如果是垂直的排列顺序,那么先把垂直方向排满,一列一列地排
    14 *如果是水平的排列顺序,那么先把水平方向排满,一行一行地排
    15 tile_images (imgs, TiledImage,3 , 'vertical')
    16 get_image_size (TiledImage, Width1, Height1)

    为什么图像是这样的呢?

    因为一共有4张图,然后要求有3列,1行肯定装不下,那么至少需要2行。由于是垂直方向排列,那么就需要先把垂直方向排满,一列一列地排。

    如果把'vertical'改成'horizontal'结果会怎样呢?

    结果发现,它会先把每一行先排满,排不下了再往后排

    二、tile_images_offset算子拼图

    算子签名:

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

    签名看不懂没关系,看看例子就懂了。

     1 read_image (Image1, '01.jpg')
     2 read_image (Image2, '02.jpg')
     3 get_image_size (Image2, Width, Height)
     4 gen_empty_obj (imgs)
     5 concat_obj (imgs, Image1, imgs)
     6 concat_obj (imgs, Image2, imgs)
     7 
     8 
     9 *第一、二、三、四……张图的左上角顶点的位置
    10 tile_images_offset (imgs, TiledImage, [0, Height], [0,0], [-1,-1], [-1,-1], [-1,-1], [-1,-1], Width, Height *2)
    11 get_image_size (TiledImage, Width1, Height1)

    为什么拼图结果是这样的呢?

    我们看看代码:

    tile_images_offset (imgs, TiledImage, [0, Height], [0,0], [-1,-1], [-1,-1], [-1,-1], [-1,-1], Width, Height *2)

    ① 上面这行代码中有很多二维元组,实际上,有几张图元组就有几维

    ② [0, Height], [0,0]指第一张图的左上角行列坐标是(0, 0),第二张图左上角行列坐标是(Height, 0),也就说第二张图在垂直方向上紧挨着第一张图。

    ③ 之后的四个参数Row1, Col1, Row2, Col2大家感兴趣可以自己去看帮助文档,一般保持默认值就行。

    ④  Width, Height *2指的是最终拼接图的宽度是 Width, 高度是Height *2。

    我们将第10行代码改成:

    tile_images_offset (imgs, TiledImage, [0, Height], [0,100], [-1,-1], [-1,-1], [-1,-1], [-1,-1], Width, Height *3)

    结果如下:

    更高级的图像拼接方法可以研究gen_projective_mosaic算子。

  • 相关阅读:
    Unique Binary Search Trees 解答
    Unique Paths II 解答
    Unique Paths 解答
    Maximum Subarray 解答
    Climbing Stairs 解答
    House Robber II 解答
    House Robber 解答
    Valid Palindrome 解答
    Container With Most Water 解答
    Remove Duplicates from Sorted List II 解答
  • 原文地址:https://www.cnblogs.com/xh6300/p/6648978.html
Copyright © 2011-2022 走看看