【OpenCV3】Stitcher图像拼接

OpenCV3中提供了一个用于图像拼接的模块——Stitcher,可以将连续拍摄的图像序列,拼接成一幅全景画面。

如下所示是56幅连续拍摄的图像:

【OpenCV3】Stitcher图像拼接_第1张图片

0.png

【OpenCV3】Stitcher图像拼接_第2张图片

1.png

【OpenCV3】Stitcher图像拼接_第3张图片

2.png

【OpenCV3】Stitcher图像拼接_第4张图片

3.png

【OpenCV3】Stitcher图像拼接_第5张图片

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);
}

结果如下:

【OpenCV3】Stitcher图像拼接_第6张图片

经裁剪,即可得到一幅全新的全景画面:

【OpenCV3】Stitcher图像拼接_第7张图片


2018.05.22



你可能感兴趣的:(图像处理,OpenCV,机器视觉)