1. 简单图像拼接

简单图像的拼接,不涉及图像融合,仅简单地平移将多张图拼接成一张图。

明确问题:

  1. 将多少张图拼起来?由于是多张图,这需要一个元组来存储多张图片的集合。
  2. 是横向拼图,还是纵向拼图?这涉及拼图的方向。
  3. 是一张挨着一张无缝拼接吗?能不能做“有缝”的自由拼接?这涉及拼接偏移量。

tile_images

算子签名:tile_images(Images : TiledImage : NumColumns, TileOrder : )

  • 输入参数:

    • Images(输入对象):多个待拼接的图像(单个图像组成的元组)。
  • 输出参数:
    • TiledImage(输出对象):拼接后的大图像
  • 控制参数:
    • NumColumns:指定在水平方向上排列的图像数量(即每行几个图像)
    • TileOrder:图片排列的顺序 "horizontal"(水平顺序)或 "vertical"(垂直顺序)
  • 注意:
    • 输入图像的通道数必须相同,因此需要在前面增加通道数的判断。
    • 输入图像的尺寸必须相同,因此需要在前面增加图像尺寸的判断。
   // 检测图像通道数,结果图为三通道彩色,原图为单通道
HTuple channels1, channels2;
HalconCpp::CountChannels(hoImage1Scaled, &channels1);
HalconCpp::CountChannels(hoImage2Scaled, &channels2);
if (channels1.I() == 1 && channels2.I() == 3) {
HalconCpp::Compose3(hoImage1Scaled, hoImage1Scaled, hoImage1Scaled, &hoImage1Scaled);
}
else if (channels1.I() == 3 && channels2.I() == 1) {
HalconCpp::Compose3(hoImage2Scaled, hoImage2Scaled, hoImage2Scaled, &hoImage2Scaled);
}
  • TileOrder参数决定了图像是按行优先(水平)还是列优先(垂直)排列
  • 如果我们设置 TileOrder = "horizontal",那么图像会按行排列,即先从左到右排列,排满一行再排下一行(行优先)。
  • 如果我们设置 TileOrder = "vertical",那么图像会按列排列,即先从上到下排列,排满一列再排下一列(列优先)。

例子:

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 (imgs, TiledImage, 3 , 'vertical') // 按列优先排列

tile_images_offset

算子签名:tile_images_offset(Images : TiledImage : OffsetRow, OffsetCol, Row1, Col1, Row2, Col2, Width, Height : )

  • 输入参数:

    • Images(输入对象):多个待拼接的图像(单个图像组成的元组)。
  • 输出参数:
    • TiledImage(输出对象):拼接后的大图像。
  • 控制参数:
    • OffsetRow, OffsetCol:(输入控制):每个图像在大图中的偏移量(行、列方向)。这两个参数是多个偏移量组成的元组,其长度必须与输入图像数量一致。
    • Row1, Col1, Row2, Col2(输出控制):可选项,返回大图中每个图像的区域坐标(左上角Row1, Col1;右下角Row2, Col2)。
    • Width, Height(输出控制):可选项,返回拼接后大图像的宽度和高度。

例子:

// 假设有两张图像: image1 和 image2
HObject image1,image2;
HObject hoTiledImage; // 制作图像元组
GenEmptyObj(&hoTiledImage);
ConcatObj(hoTiledImage, image1, &hoTiledImage);
ConcatObj(hoTiledImage, image2, &hoTiledImage); // 设置偏移量:
// image1 放置在 (0, 0)
// image2 放置在 image1 右侧,距离50像素,以每张图像的左上角点作为起始点
HTuple hv_OffsetRow = {0, 0}; // 行偏移
HTuple hv_OffsetCol = {0, 50}; // 列偏移 // 不指定输出尺寸,由算子自动计算
HTuple hv_Width, hv_Height;
hv_Width = HTuple();
hv_Height = HTuple(); // 执行拼接
HTuple hv_Row1, hv_Col1, hv_Row2, hv_Col2;
HalconCpp::TileImagesOffset(hv_Images, &hoTiledImage,
hv_OffsetRow, hv_OffsetCol,
&hv_Row1, &hv_Col1, &hv_Row2, &hv_Col2,
&hv_Width, &hv_Height
);

Halcon 简单图像拼接的更多相关文章

  1. halcon+csharp多图像拼接实现

    简单的来说,就是将 一类的图片最后拼接成为这样的结果 这个图片有点大呀. 基本步骤: 1.halcon进行仿射变化进行镜头畸变.这个可以参考halcon中一个二维码畸变的例子: 2.基于模版匹配找出偏 ...

  2. 三维重建:SLAM的尺度和方法论问题

    百度百科的定义.此文引用了其他博客的一些图像,如有侵权,邮件联系删除. 作为算法的SLAM,被称为同步相机位姿确定和地图构建.作为一个工程的SLAM,有众多的算法. 在计算机视觉中, 三维重建是指根据 ...

  3. Halcon一日一练:图像拼接技术2:步骤与例程

    上一篇主要介绍了图像拼接的一些原理和方法,这一篇将主要介绍步骤和例程: 接上一篇: 基于特征的接拼方法,分为四个步骤 1.特征检测:从图像中检测出显著且独特的图像特征,诸如:闭合区域,直线段,边缘,轮 ...

  4. halcon 模板匹配(最简单)

    模板匹配是机器视觉工业现场中较为常用的一种方法,常用于定位,就是通过算法,在新的图像中找到模板图像的位置.例如以下两个图像.   这种模板匹配是最基本的模板匹配.其特点只是存在平移旋转,不存在尺度变化 ...

  5. Halcon一日一练:图像拼接技术

    图像拼接技术就是针对同一场景的一系列图片,根据图片的特征,比如位置,重叠部分等,拼接成一张大幅的宽视角的图像. 图像拼接要求拼接后图像最大程度的与原图一致,失真尽可能的小,并且要尽量做到天衣无缝即没有 ...

  6. MFC&Halcon之图片显示

    上一篇介绍了MFC调用Halcon功能的简单例子,在这个例子中,点击按钮会弹出一个窗口显示图片,但是这样显示并不美观,而且...于是我决定把显示窗口做在MFC的窗体内部. 具体的方案是:使用一个Pic ...

  7. 跟我从零基础学习Unity3D开发--U3d脚本注意事项及两个基本函数的简单介绍

    经过上一篇的学习,我相信开发环境您已经搭好了,如果还没有搭好可以百度一下. 今天主要讲的有以下几点: 第一:Unity3D中的C#脚本与.net中的C#写法的区别 1.Unity3D C#脚本不支持命 ...

  8. zw版·Halcon与delphi(兼谈opencv)

    zw版·Halcon与delphi(兼谈opencv) QQ群 247994767(delphi与halcon) <Halcon与delphi>系列,早两年就想写,不过一方面,因为Halc ...

  9. 【《zw版·Halcon与delphi系列原创教程》 zw_halcon人脸识别

    [<zw版·Halcon与delphi系列原创教程>zw_halcon人脸识别 经常有用户问,halcon人脸识别方面的问题. 可能是cv在人脸识别.车牌识别方面的投入太多了. 其实,人脸 ...

  10. 《zw版·Halcon-delphi系列原创教程》 zw版-Halcon常用函数Top100中文速查手册

    <zw版·Halcon-delphi系列原创教程> zw版-Halcon常用函数Top100中文速查手册 Halcon函数库非常庞大,v11版有1900多个算子(函数). 这个Top版,对 ...

随机推荐

  1. openGauss数据库部署实践(华为云开发者云实验)

    前言 数据库课程上了解到openGuass数据库,做完云实验发现实验指导手册有些地方不够细致或者已经与实际的操作步骤有所偏差,遂写一篇博客为其他同学学习提供参考. 什么是openGuass? open ...

  2. java--xml约束、tomcat服务器

    xml约束 XML语法: 规范的xml文件的基本编写规则.(由w3c组织制定的) XML约束: 规范XML文件数据内容格式的编写规则.(由开发者自行定义) DTD约束 DTD约束:语法相对简单,功能也 ...

  3. MySQL的三大日志

    前言 飞机失事靠黑匣子还原真相,MySQL崩溃靠三大日志保障数据安全. 作为一个工作多年的程序员,我见过太多因日志配置不当引发的灾难:数据丢失.主从同步中断.事务回滚失败... 今天,我将用最通俗的方 ...

  4. Rust 修仙之道 第十章 链灵境 · 构筑灵链之道

    第十章:链灵境 · 构筑灵链之道 "灵链相接如脉络,错一节则断万法:唯指向明晰.层次分明者,方可汇聚长流." 顾行云接下了云隐派的一道秘术任务:重塑断裂的灵气传输通道.此通道呈现& ...

  5. 前端开发系列073-JQuery篇之源码核心

    本文介绍jQuery 源码的主体结构和关键细节. jQuery是前端开发中绕不开的一个框架,在React和Vue等框架出现前,jQuery无疑是前端开发主流技术栈中不可或缺的框架.它为我们提供了强大的 ...

  6. linux 虚拟内存增加

    简介 增加内存以跑动大内存程序 https://www.cnblogs.com/lori/p/13344060.html 主要命令 增加10个G的虚拟内存 sudo dd if=/dev/zero o ...

  7. java slider

    简介 简单 code /* * @Author: your name * @Date: 2020-11-05 10:21:52 * @LastEditTime: 2020-11-05 10:45:16 ...

  8. SciTech-BigDataAIML-Algorithm-Loss Function(损失函数)-Classification(分类模型)损失函数

    ss 分类模型损失函数 平方差损失 对数损失 指数损失 焦点损失 合页损失 余弦接近损失 交叉熵损失 Kullback-Leibler MRE 稀疏分类交叉熵损失 对比损失 三元组(多元组)损失

  9. POLIR-Society-Organization-Psychology-Persuasion: The ELM(Elaboration Likelihood Model) of Persuasion Explained

    https://www.verywellmind.com/the-elaboration-likelihood-model-of-persuasion-7724707 Theories > So ...

  10. SciTech-BigDataAIML-LLM-Transformer Series-$\large Supervised\ Statistical\ Model$监督学习的统计模型+$\large Transformer+Self Attention$的核心原理及实现

    SciTech-BigDataAIML-LLM-Transformer Series> \(\large Supervised\ Statistical\ Model\): \(\large T ...