多幅图像全景拼接
全景拼接在OpenCv中可以利用Stitch类方便实现,Stitching类将图像的矫正,对齐,图像映射,拼接,融合全部包括进去了。
这里有一个例子可以对三幅图像进行全景拼接:
// 图像拼接.cpp : 定义控制台应用程序的入口点。 // #include <iostream> #include <fstream> #include "opencv2/highgui/highgui.hpp" #include "opencv2/stitching/stitcher.hpp" #include <sstream> #include <string> using namespace std; using namespace cv; bool try_use_gpu = false; vector<Mat> imgs; string result_name;// = "result.jpg"; string IntToString(int num) { stringstream ss; string s; ss << num; ss >> s; return s; } string str = "quanjing\\"; int main(int argc, char* argv[]) { result_name = str + "stichimg.jpg"; for (int i = 1; i <=3; ++i) { Mat img = imread(str + IntToString(i) + ".jpg", 1); imgs.push_back(img); } Mat pano; Stitcher stitcher = Stitcher::createDefault(try_use_gpu); Stitcher::Status status = stitcher.stitch(imgs, pano); if (status != Stitcher::OK) { cout << "Can't stitch images, error code = " << int(status) << endl; return -1; } namedWindow("pano", 0); imshow("pano", pano); imwrite(result_name, pano); waitKey(0); return 0; }
测试了部分图片,发现相邻图像之间的重复区域过小会拼接失败。实际上,这些图像之间还是有比较多的重复区域,利用其它的拼接软件可以实现拼接。
因此,要获取好的拼接效果还要自行研究
部分疑问:
1 图像拼接中如何将多幅图像对准在同一像素坐标系下面
http://stackoverflow.com/questions/24563173/stitch-multiple-images-using-opencv-python
2 柱面投影模型的实现
3 图像的对比度调整融合
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Matlab2014b中也加入了Panorama模块
http://cn.mathworks.com/help/vision/examples/feature-based-panoramic-image-stitching.html