OpenCV3中提供了一个用于图像拼接的模块——Stitcher,可以将连续拍摄的图像序列,拼接成一幅全景画面。
如下所示是56幅连续拍摄的图像:
0.png
1.png
2.png
3.png
4.png
处理代码如下:
#include < stdio.h >
#include < opencv2\opencv.hpp >
#include < opencv2\stitching.hpp >
int main()
{
std::vector< cv::Mat > vImg;
cv::Mat rImg;
vImg.push_back(cv::imread("images0/0.png"));
vImg.push_back(cv::imread("images0/1.png"));
vImg.push_back(cv::imread("images0/2.png"));
vImg.push_back(cv::imread("images0/3.png"));
vImg.push_back(cv::imread("images0/4.png"));
cv::Stitcher stitcher = cv::Stitcher::createDefault();
unsigned long AAtime = 0, BBtime = 0; //check processing time
AAtime = cv::getTickCount(); //check processing time
cv::Stitcher::Status status = stitcher.stitch(vImg, rImg);
BBtime = cv::getTickCount(); //check processing time
printf("Time consuming: %.2lf sec \n", (BBtime - AAtime) / cv::getTickFrequency()); //check processing time
if (cv::Stitcher::OK == status)
cv::imshow("Stitching Result", rImg);
else
printf("Stitching fail.");
cv::waitKey(0);
}
结果如下:
经裁剪,即可得到一幅全新的全景画面:
2018.05.22