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

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

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

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

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

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

一、tile_images算子拼图

算子签名:

tile_images(Images : TiledImage : NumColumns, TileOrder : )

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

 read_image (Image1, '01.jpg')
read_image (Image2, '02.jpg')
read_image (Image3, '03.jpg')
read_image (Image4, '04.jpg') get_image_size (Image2, Width, Height)
gen_empty_obj (imgs)
concat_obj (imgs, Image1, imgs)
concat_obj (imgs, Image2, imgs)
concat_obj (imgs, Image3, imgs)
concat_obj (imgs, Image4, imgs) *如果是垂直的排列顺序,那么先把垂直方向排满,一列一列地排
*如果是水平的排列顺序,那么先把水平方向排满,一行一行地排
tile_images (imgs, TiledImage, , 'vertical')
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 : )

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

 read_image (Image1, '01.jpg')
read_image (Image2, '02.jpg')
get_image_size (Image2, Width, Height)
gen_empty_obj (imgs)
concat_obj (imgs, Image1, imgs)
concat_obj (imgs, Image2, imgs) *第一、二、三、四……张图的左上角顶点的位置
tile_images_offset (imgs, TiledImage, [0, Height], [0,0], [-,-], [-,-], [-,-], [-,-], Width, Height *2)
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算子。

最新文章

  1. centos 6 安装配置openvpn
  2. Google C++单元测试框架GoogleTest---Extending Google Test by Handling Test Events
  3. SQL Server获取下一个编码字符实现
  4. tomcat 内存溢出
  5. HDU 5339 Untitled (暴力枚举)
  6. PHP高级应用视频教程大全学习
  7. D3D11 Query查询耗时
  8. android上的缓存、缓存算法和缓存框架
  9. mvc项目,导出到Excel,中文显示乱码
  10. Bootstrap 列偏移\列嵌套\列排序
  11. 关于在用Swift开发iOS时如何隐藏NavigationBar和TabBar
  12. java组装json和提取一个json的例子
  13. Android Studio 初始新建项目时 build gradle project 超级慢的原因
  14. hdu_5293_Tree chain problem(DFS序+树形DP+LCA)
  15. Hadoop 集群安装(主节点安装)
  16. INTERVAL
  17. 建模:通过ES平铺关系型数据库多表的数据
  18. python 按照自然数排序遍历文件 python os.listdir sort by natural sorting
  19. mac for appium环境安装
  20. ruby rvm groke

热门文章

  1. springboot整合mybatis增删改查(二):springboot热部署
  2. @Transactional、Spring的声明式事务
  3. Java---SSH(MVC)面试
  4. linux下配置python环境 django创建helloworld项目
  5. AngularJS开发指南14:依赖注入
  6. yum安装nagois
  7. 263. Ugly Number + 264. Ugly Number II + 313. Super Ugly Number
  8. Maven(一) Maven3 的安装与配置
  9. Linux下强大的查找命令find 用法和常见用例
  10. Wrapper模式(Decorator模式)