[opencv] 图像拼接类 Stitcher
2017-06-14 本文已影响0人
ericdejavu
created by Dejavu
(不断更新中)
简介
stitching是OpenCV2.4.0添加的一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitcher类当中。
这个类当中我们可能用到的成员函数有createDefault、estimateTransform、composePanorama、stitch。其内部实现的过程是非常繁琐的,包括图像特征的寻找和匹配,摄像机的校准,图像的变形,曝光补偿和图像融合。在OpenCV中调用createDefault函数生成默认的参数即可进行图像拼接。estimateTransform和composePanorama函数都是比较高级的应用。
c++实现
- createDefault 实现
//这里用的是opencv2.4.13
#include <opencv2\opencv.hpp>
#include <opencv2\stitching\stitcher.hpp>
using namespace cv;
using namespace std;
bool try_use_gpu = false;
vector<Mat> imgs;
string result_name = "res.jpg";
int main() {
char file[10];
for (int i = 1;i <= 2;i++) {
sprintf(file, "%d.jpg", i);
imgs.push_back(imread(file));
}
Mat res;
Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
Stitcher::Status status = stitcher.stitch(imgs, res);
imwrite(result_name, res);
return 0;
}
图像分辨率 800x600 无gpu加速
拼接图
运行时长与内存占比
可见虽然拼接结果十分不错,但是分辨率为800x600的图像耗时太严重,当然你可以采取gpu加速的方法加快拼接算法运行的速度,但这里我将尝试使用estimateTransform和composePanorama函数来解决算法慢速问题