关于图像的拼接Halcon有不少的例程,但是大多数是针对两个不同相机采像后,通过系列标定将图片矫正合成为一张图片。在某些应用中,我们可能只需要简单的将两张图片拼接在一起,例如以下线扫相机连续采像的情形,这时我们需要的只是简单将两张图片连在一起。下面首先讲一下采用Halcon的处理方式。


//定义图像变量
HImage imgFirst;
HImage imgSecond;
HImage imgTempComb;
HImage imgCombine;
//打开图片
imgFirst = new HImage("F:\\L8192-002.jpg");
imgSecond = new HImage("F:\\L8192-003.jpg");//执行拼接
imgTempComb = imgFirst.ConcatObj(imgSecond);
imgCombine= imgTempComb.TileImages(1, "vertical");
imgCombine.WriteImage("jpeg", 0, "F:\\Test.jpg");
//释放内存
imgTempComb.Dispose();
imgFirst.Dispose();
imgSecond.Dispose();


这里要注意一点,图片拼接的代码改成如下形式,也是可以正常运行的,但是由于imgFirst一直指向最新的内存区域,期间开辟的内存我们将没有变量来指向并释放。

imgFirst= imgFirst.ConcatObj(imgSecond);
imgFirst= imgFirst.TileImages(1, "vertical");
imgFirst.WriteImage("jpeg", 0, "F:\\Test.jpg");

以上方法是基于Halcon自带函数完成拼接的,对于一般的应用而言,看到这里就可以结束了。

虽然说了这么多,且功能也可以实现,但是用这种方法很低效,CPU消耗大,对于高速的应用并不适用,其实我们的需求很简单只是需要将图像(内存)数据进行一个简单的连接,可以有更简单的方式来实现。

[DllImport("kernel32.dll")]
public static extern void MoveMemory(IntPtr dest, IntPtr src, uint count);string type;
int width;
int height;
//获得HImage图像数据的指针
HTuple firstP = imgFirst.GetImagePointer1(out type, out width, out height);
HTuple secondP= imgSecond.GetImagePointer1(out type, out width, out height);
uint imgCount = (uint)(width * height);//开辟好两倍于图片的空间
imgCombine = new HImage();
imgCombine.GenImageConst("byte", width, height * 2);
HTuple combP = imgCombine.GetImagePointer1(out type, out width, out height);//通过指针的方式直接将内存数据进行连接
MoveMemory(combP.IP, firstP.IP, imgCount);
MoveMemory(combP.IP+(int) imgCount, secondP.IP, imgCount);
imgCombine.WriteImage("jpeg", 0, "F:\\Test2.jpg");

上述方式在CPU消耗和运算时间上较用传统的Halcon算子要好很多。

Halcon的简单图像拼接相关推荐

  1. 学习Halcon之简单车牌识别

    最近由于要接触halcon就开始学习halcon课程,看得是超人视觉得视频,今天学了车牌识别,觉得使用halcon确实很方便,学习的思路也很重要,所以花点时间记一记. 首先,获取一张含有车牌的图片后将 ...

  2. Halcon图像拼接-算法速度优化

    参考例程mosaicking_pyramid.hdev 原理简要说明:在上一篇的基础上,我们知道了在halcon中,图像拼接的大致原理,知道了算法运行的过程,其中一个关键步骤至关重要,那就是找角点.我 ...

  3. 如何在VC环境下使用Halcon库

    今天看到一位朋友在博客上留言,向我提出了一个问题:"我的问题是HALCON不能支持VxWorks操作系统,我能不能把HALCON在Linux下的库移植到VxWorks下调用呢?您指的移植是什 ...

  4. halcon学习拓展系列—修改图片分辨率算子modify_image_size(尺度不缩放)

    前面做过两个涉及图像分表率调整的专题 1)<halcon学习拓展系列-根据分辨率调整点云图像分辨率算子adjust_image_size_base_resolution>(尺度缩放) 2) ...

  5. 一文弄懂halcon例程:rim.hdev

    一文弄懂halcon例程:rim.hdev 打怪的路上总是无聊的,但是也不能不打啊,我自己现在也在每天打怪升级呢.昨天就因为一个问题,我到视觉群问里面的大牛,结果,他不帮我解答,他不告诉我怎么解决就算 ...

  6. 【Halcon】利用Halcon对图片进行截取

    利用Halcon对图片进行简单截取分割 我们将从这张图片内保留旗部分,去除其他部分 1.关闭活动图形窗口,打开一个新窗口 dev_close_window() dev_open_window (0, ...

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

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

  8. 我学习图像处理的小结

        前一段时间,我一直在制作OpenCV基础知识的课件(<学习OpenCV3.0初级实战视频课程> http://edu.51cto.com/course/10381.html,< ...

  9. halcon图像拼接

    halcon图像拼接技术-工业视觉/halcon-少有人走的路 一.简介 最近做的一个项目要做图像拼接,那么什么是图像拼接呢? 图像拼接技术就是针对同一场景的一系列图片,根据图片的特征,比如位置,重叠 ...

  10. 2021-01-05 Halcon初学者知识【7】 最简单的测距问题-点与点测距

    Halcon初学者知识[7] 最简单的测距问题-点与点测距 点与点测距的思路,是建立在两个不同坐标点上的距离计算问题.由于在现实中,需要测定的是几何上的点距,比如,两个圆的圆心距离.一个线与另一条线的 ...

最新文章

  1. ubuntu vasp 安裝_VASP安装过程(64位)
  2. mysql为datetime类型的字段设置默认值current_timestamp,引发 Invalid default value for 错误...
  3. android开发 apk文件,android开发中,将数据库文件与APK一起发布?
  4. 嵌入式软件面试(基础题)总结,不断更新
  5. anchor锚点 antvue_浅谈vue 锚点指令v-anchor的使用
  6. 不会编程没关系,有了这个“Excel”,零基础上手生成网络
  7. mysql批量导入csv数据_csv批量导入mysql命令
  8. 专利说明书检索与PDF文件下载方法
  9. 关于虚拟机非正常关机的解决方案
  10. iptables 删除规则
  11. JAVA国际化 - Eason Jiang - 博客园
  12. Spanning-tree guard features配置案例
  13. 利用 visitor map (访客地图) 统计网站访客
  14. python, numpy中的.tile方法解释
  15. 微信公众号的开发和使用注意事项有哪些?
  16. C++核心准则​讨论:析构,释放和交换操作必须永不失败
  17. SS端加密以及obfs混淆推荐
  18. Linux学习:Linux启动管理器GRUB2
  19. 写出计算机的主要应用,计算机的主要用途是什么?
  20. pcap_findalldevs_ex 文件没有定义

热门文章

  1. YouTuBe油管/头条点赞订阅关注分享提示PR模板Mogrt
  2. Windows和Ubuntu双系统美化 针对UEFI启动方式
  3. android n beta,谷歌发布Android N(安卓7.0) Beta5开发者预览版固件更新
  4. 修改form表单action路径
  5. 对称算法与非对称算法
  6. 三天打鱼两天晒网python程序_三天打鱼两天晒网
  7. 前端JavaScript学习网站(重磅推荐)
  8. 人人商城(分销版)1.11.7微擎原版,装修店铺后,网站链接失效,页面不显示数据
  9. 计算机组装主机怎么拆,【电脑组装知识网】电脑主机组装教程之戴尔显示器底座拆卸教程...
  10. Oracle EBS 键弹性域 段限定词取值