4,445
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <fstream>
#include <time.h>
#include "windows.h"
#include "opencv/cv.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/stitching/stitcher.hpp"
using namespace std;
using namespace cv;
bool try_use_gpu = false;
vector<Mat> imgs;
string result_name="result.jpg";
int main ()
{
CvCapture *capture1=cvCreateFileCapture("C://1.avi");
CvCapture *capture2=cvCreateFileCapture("C://2.avi");
if(!capture2||!capture1)
return -1;
IplImage *bgrframe1=cvQueryFrame(capture1);
IplImage *bgrframe2=cvQueryFrame(capture2);
double fps1=cvGetCaptureProperty(capture1,CV_CAP_PROP_FPS);
double fps2=cvGetCaptureProperty(capture2,CV_CAP_PROP_FPS);
double fps=fps1>fps2?fps2:fps1;
CvSize size=cvSize(2*(int)cvGetCaptureProperty(capture1,CV_CAP_PROP_FRAME_WIDTH)
,1.2*(int)cvGetCaptureProperty(capture1,CV_CAP_PROP_FRAME_HEIGHT));
CvVideoWriter *writer=cvCreateVideoWriter(
"result.avi",
CV_FOURCC('M','J','P','G'),
fps,
size);
IplImage *dstImage=cvCreateImage(size,IPL_DEPTH_8U,3);
int i=0;
int j=0;
IplImage dstmg;
Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
Stitcher::Status status;
Mat img1;
Mat img2;
while((bgrframe1=cvQueryFrame(capture1))!=NULL&&(bgrframe2=cvQueryFrame(capture2))!=NULL)
{
img1=bgrframe1;
imgs.push_back(img1);
img2=bgrframe2;
imgs.push_back(img2);
Mat pano;
if(j==197)
j--;
status = stitcher.stitch(imgs, pano);
if(status == Stitcher::OK)
{
dstmg=pano;
cvResize(&dstmg,dstImage,CV_INTER_LINEAR);
cvWriteFrame(writer,dstImage);
++i;
cout<<"step1 "<<i<<endl;
}
++j;
cout<<"step2 "<<j<<endl;
imgs.pop_back();
imgs.pop_back();
}
cvWaitKey(0);
cvReleaseVideoWriter(&writer);
cvReleaseImage(&dstImage);
cvReleaseCapture(&capture1);
cvReleaseCapture(&capture2);
return 0;
}