网上已经很多相关的代码了,主要就是调用Stitcher::Status status = sti.stitch(vImg, rImg);这里主要是记录一下自己的一个实现。
图片1
图片2
图片3
这里是代码:
#include < stdio.h >
#include < opencv2\opencv.hpp >
#include < opencv2\stitching\stitcher.hpp >
using namespace cv;
using namespace std;
int main(){
vector<Mat>vImg;
Mat rImg;
vImg.push_back(imread("sanL.png"));
vImg.push_back(imread("sanM.png"));
vImg.push_back(imread("sanR.png"));
Stitcher sti = Stitcher::createDefault();
unsigned long AAtime = 0, BBtime = 0;
AAtime = getTickCount();
Stitcher::Status status = sti.stitch(vImg, rImg);
BBtime = getTickCount();
printf("%.21f sec \n", (BBtime - AAtime) / getTickFrequency());
if (Stitcher::OK == status)
imshow("Stitching Result", rImg);
else cout << "FAIL\n";
waitKey(0);
}
拼接结果:
总结:
这方法实现非常简单,效果也挺好,缺点是速度很慢,如果有实时性的要求,建议使用GPU进行计算。