基于opencv的图像拼接(四): 基于stitch类的离线图像拼接

来源:互联网 发布:手机网络抓包工具 编辑:程序博客网 时间:2024/06/10 22:00

获取的拼接的连续图像放在两个文件夹,运用stitch类连续拼接

程序效果:
单看每一张效果都还是不错的,但是连续播放就不行了,每次变换矩阵还是不一样的,所以一般离线图像拼接还是以第一帧图像为基准计算变换矩阵,进行后续帧数的拼接。
但是为什么“单看每一张效果都还是不错的,但是连续播放就不行了”,我也不是很清楚,希望大神懂的可以教教我


附上代码,代码比较简单:

#include <iostream>  #include <opencv2/highgui/highgui.hpp>  #include <opencv2/legacy/legacy.hpp>  #include <opencv2/stitching/stitcher.hpp>  #include <vector>  using namespace std;  using namespace cv;    void stitch(vector<Mat> imgs,Mat& resultMat)  {        bool flag = true;      Stitcher stitcher = Stitcher :: createDefault(flag);      Stitcher::Status status = stitcher.stitch(imgs, resultMat);     }  int main()  {      bool stop = false;          vector<Mat>imgs;      Mat resultMat1;     const int count = 150;   char image_name1[1000];   char image_name2[1000];   char image_name3[1000];   for (int i = 1; i <= count; i++)   {           sprintf(image_name1, "..\\pica\\7(%d).jpg", i); //放在当前文件夹pica中,图片顺序分别为7(1),7(2).....7(i)sprintf(image_name2, "..\\picb\\6(%d).jpg", i);Mat img1 = imread(image_name1);Mat img2 = imread(image_name2);if(img1.empty())cout << "empty" << endl;//resize(img1, img1, Size(640, 480));//resize(img2, img2, Size(640, 480));imgs.push_back(img1);          imgs.push_back(img2);  stitch(imgs, resultMat1);        sprintf(image_name3, "..\\stitch\\1(%d).jpg", i);resize(resultMat1, resultMat1, Size(480, 320));        imwrite(image_name3,resultMat1);imgs.clear();   }    return 0;        }  
拼接效果:

原创粉丝点击