獲取的拼接的連續圖像放在兩個文件夾,運用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;
}
拼接效果: