多幅图像全景拼接

全景拼接在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

 

posted on 2015-02-05 10:14  Maddock  阅读(2372)  评论(0编辑  收藏  举报

导航