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