配置环境:VS2010+OpenCV2.4.9
为了使用 OpenCV 实现图像拼接头痛了好长时间,一直都没时间做,今天下定决心去实现基本的图像拼接。
首先,看一看使用 OpenCV 进行拼接的方法
基本都是用 Stitcher 类中的 stitch 方法。下面是网上的代码,同时也是 opencv\samples\cpp\stitching.cpp 的代码。
感觉这个说的比较繁琐,我就改写成了下面的代码
下面看一下原图和效果图,(以四张原图为例,分为左上,右上,左下,右下)
效果图如下:
可以发现代码中最关键的两句就是:
Stitcher 是 OpenCV 的一个类,下面看一下这个类的源代码:
可以看到 Stitcher 大致有这些成员函数:createDefault,estimateTransform,composePanorama,stitch 等等。
Stitcher::estimateTransform 和 Stitcher::composePanorama 的使用为高级使用,需要清楚Stitching pipeline 的过程。
下面贴出 pipeline:
可以看出这个过程很复杂,需要涉及到很多的算法,比如:特征点的提取、特征点匹配、图像融合等等。这些过程 OpenCV 都为我们封装在 Stitcher 类中,不在此细述。
总结
虽然用 OpenCV 中的 Stitcher 类实现了基本的拼接,但是有一个最大的问题是,运行的效率是极低的,就这个代码中,拼接 3 张图片差不多用了一分钟,这在需要做实时拼接的时候是根本不可能使用的,所以后面需要做的工作任然是弄清楚 Stitching pipeline 的详细过程,进一步优化代码,提高拼接运行效率。
下面贴出参考资料:
http://docs.opencv.org/2.4.2/modules/stitching/doc/high_level.html
下面贴出源代码和 OpenCV 中的 stiching.cpp 和 stitching_detailed.cpp 的下载地址:
http://download.csdn.net/detail/u013637931/8255767