有时候通常需要简单的拼图,不涉及图像融合之类的,仅仅是简单的平移将多张图拼接成一张图。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算子。

简单拼接图像的tile_images和tile_images_offset算子的更多相关文章

  1. CSharpGL(24)用ComputeShader实现一个简单的图像边缘检测功能

    CSharpGL(24)用ComputeShader实现一个简单的图像边缘检测功能 效果图 这是红宝书里的例子,在这个例子中,下述功能全部登场,因此这个例子可作为使用Compute Shader的典型 ...

  2. Python用Pillow(PIL)进行简单的图像操作

    Python用Pillow(PIL)进行简单的图像操作 颜色与RGBA值 计算机通常将图像表示为RGB值,或者再加上alpha值(通透度,透明度),称为RGBA值.在Pillow中,RGBA的值表示为 ...

  3. 四种简单的图像显著性区域特征提取方法-----AC/HC/LC/FT。

    四种简单的图像显著性区域特征提取方法-----> AC/HC/LC/FT. 分类: 图像处理 2014-08-03 12:40 4088人阅读 评论(4) 收藏 举报 salient regio ...

  4. JAVA代码根据经纬度范围计算WGS84与谷歌全球墨卡托包含的切片数目与拼接图像像素尺寸

    根据项目需求编写的代码. 适用场景:在网络地图上,比如天地图与谷歌地图,用户用鼠标在地图上拉一个矩形框,希望下载该矩形框内某一层级的瓦片数据,并将所有瓦片拼接成一个完整的,包含地理坐标的tif图像. ...

  5. 简单的图像显著性区域特征提取方法-----opencv实现LC,AC,FT

    https://blog.csdn.net/cai13160674275/article/details/72991049?locationNum=7&fps=1 四种简单的图像显著性区域特征 ...

  6. 基于qml创建最简单的图像处理程序(3)-使用opencv&qml进行图像处理

    <基于qml创建最简单的图像处理程序>系列课程及配套代码基于qml创建最简单的图像处理程序(1)-基于qml创建界面http://www.cnblogs.com/jsxyhelu/p/83 ...

  7. 基于qml创建最简单的图像处理程序(2)-使用c++&qml进行图像处理

     <基于qml创建最简单的图像处理程序>系列课程及配套代码基于qml创建最简单的图像处理程序(1)-基于qml创建界面http://www.cnblogs.com/jsxyhelu/p/8 ...

  8. 基于qml创建最简单的图像处理程序(1)-基于qml创建界面

    <基于qml创建最简单的图像处理程序>系列课程及配套代码基于qml创建最简单的图像处理程序(1)-基于qml创建界面http://www.cnblogs.com/jsxyhelu/p/83 ...

  9. Python下opencv使用笔记(二)(简单几何图像绘制)

    简单几何图像一般包含点.直线.矩阵.圆.椭圆.多边形等等.首先认识一下opencv对像素点的定义. 图像的一个像素点有1或者3个值.对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值.他们表现出 ...

随机推荐

  1. ubuntu 11.04 old sources.list

    #deb cdrom:[Ubuntu 11.04 _Natty Narwhal_ - Release amd64 (20110427.1)]/ natty main restricted # See ...

  2. vim 编辑 windows下的文本时出现乱码, 修改配置后 已解决

    最近用VIM 查看一个 WINDOWS下的文本,打开以后发现出现乱码,具体如上图. 最后在网上找到了一个解决方法: 原文地址: https://www.zhihu.com/question/22363 ...

  3. CH2101 可达性统计

    题意 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量.N,M≤30000. 分析 有向无环图,可以按拓扑序逆序统计答案.可以用bitset维护可达性. 时间复杂度\(O(N ...

  4. deno学习二 基本代码

    deno 介绍是安全的ts 运行时 简单的代码 使用js(app.js) console.log("demoapp") 输出 dalongdemo 使用ts(app.ts) con ...

  5. 显示列表控件(引用SourceGrid)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...

  6. kettle modified javascript 步骤的一个例子

    例子里用到的 org.htmlparser.Parser 是一个html 的解析器,可以在 sourceforge 上下载. 这个例子使用 org.htmlparser.Parser 包来解析一个 h ...

  7. 函数前修饰const与函数名后修饰const

    #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #inc ...

  8. springboot利用MockMvc测试controller控制器

    主要记录一下控制器的测试,service这些类测试相对简单些(可测试性强) API测试需求比较简单: ① 需要返回正确的http状态码 200 ② 需要返回json数据,并且不能返回未经捕获的系统异常 ...

  9. mysql-1安装和数据库的管理

    1.安装 直接docker安装,客户端使用Navicat Premium. docker run -d --name csjmysql -p 3306:3306 -e MYSQL_ROOT_PASSW ...

  10. php 数字格式化

    php 数字格式化 1.位数不足前面补0 <?php for($i=1; $i<=17 ;$i++){ $var = sprintf("0%3d",$i); echo ...