简单拼接图像的tile_images和tile_images_offset算子
有时候通常需要简单的拼图,不涉及图像融合之类的,仅仅是简单的平移将多张图拼接成一张图。tile_images和tile_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算子。
最新文章
- centos 6 安装配置openvpn
- Google C++单元测试框架GoogleTest---Extending Google Test by Handling Test Events
- SQL Server获取下一个编码字符实现
- tomcat 内存溢出
- HDU 5339 Untitled (暴力枚举)
- PHP高级应用视频教程大全学习
- D3D11 Query查询耗时
- android上的缓存、缓存算法和缓存框架
- mvc项目,导出到Excel,中文显示乱码
- Bootstrap 列偏移\列嵌套\列排序
- 关于在用Swift开发iOS时如何隐藏NavigationBar和TabBar
- java组装json和提取一个json的例子
- Android Studio 初始新建项目时 build gradle project 超级慢的原因
- hdu_5293_Tree chain problem(DFS序+树形DP+LCA)
- Hadoop 集群安装(主节点安装)
- INTERVAL
- 建模:通过ES平铺关系型数据库多表的数据
- python 按照自然数排序遍历文件 python os.listdir sort by natural sorting
- mac for appium环境安装
- ruby rvm groke
热门文章
- springboot整合mybatis增删改查(二):springboot热部署
- @Transactional、Spring的声明式事务
- Java---SSH(MVC)面试
- linux下配置python环境 django创建helloworld项目
- AngularJS开发指南14:依赖注入
- yum安装nagois
- 263. Ugly Number + 264. Ugly Number II + 313. Super Ugly Number
- Maven(一) Maven3 的安装与配置
- Linux下强大的查找命令find 用法和常见用例
- Wrapper模式(Decorator模式)