BOOL CMontageImpl:: StartMontageFile(const char* filepath1, const char* filepath2)
{
IplImage *newFrame=NULL;
IplImage *frame1=NULL;
IplImage *frame2=NULL;
CvCapture * pCapture1 = cvCreateFileCapture(filepath1);
CvCapture * pCapture2 = cvCreateFileCapture(filepath2);
CvRect rect;
CvVideoWriter *pWriter=NULL;
//get the frame number of two videos
int frameNo1 = (int) cvGetCaptureProperty(pCapture1, CV_CAP_PROP_FRAME_COUNT);
int frameNo2 = (int) cvGetCaptureProperty(pCapture2, CV_CAP_PROP_FRAME_COUNT);
if(frameNo1!=frameNo2)
printf("video length 1 != video length 2\n");
else
printf("Total frame numbers: %d\n",frameNo1);
//get the frame width of two videos
int frameWidth1 = (int) cvGetCaptureProperty(pCapture1, CV_CAP_PROP_FRAME_WIDTH);
int frameWidth2 = (int) cvGetCaptureProperty(pCapture2, CV_CAP_PROP_FRAME_WIDTH);
if(frameWidth1!=frameWidth2)
printf("video width 1 != video width 2\n");
else
printf("frame width: %d\n",frameWidth1);
//get the frame height of two videos
int frameHeight1 = (int) cvGetCaptureProperty(pCapture1, CV_CAP_PROP_FRAME_HEIGHT );
int frameHeight2 = (int) cvGetCaptureProperty(pCapture2, CV_CAP_PROP_FRAME_HEIGHT );
if(frameHeight1!=frameHeight2)
printf("video height 1 != video height 2\n");
else
printf("frame height: %d\n",frameHeight1);
//get the video fps
int fps1 = (int) cvGetCaptureProperty(pCapture1, CV_CAP_PROP_FPS );
int fps2 = (int) cvGetCaptureProperty(pCapture2, CV_CAP_PROP_FPS );
if(fps1!=fps2)
printf("video fps 1 != video fps 2\n");
else
printf("frame fps: %d\n",fps1);
int initFlag=0;
int counter=0;
char tempfilename[MAX_PATH]={0};
Genratefilename(tempfilename);
StartMonitorPopDecodeThread();
while((frame1=cvQueryFrame(pCapture1))!=NULL && (frame2=cvQueryFrame(pCapture2))!=NULL )
{
printf("%d\n",counter++);
if(initFlag==0)
{
int outCompressCodec = (int)cvGetCaptureProperty(pCapture1, CV_CAP_PROP_FOURCC);
char *fourcc = (char *) (&outCompressCodec);
printf("fourcc = <%c%c%c%c>\n" , fourcc[3], fourcc[2], fourcc[1], fourcc[0]);
newFrame = cvCreateImage(cvSize(frame1->width*2,frame1->height),frame1->depth,frame1->nChannels);
pWriter = cvCreateVideoWriter(tempfilename, -1,fps1,cvSize(frame1->width*2,frame1->height));
initFlag=1;
}
rect.x=0;
rect.y=0;
rect.height=frameHeight1;
rect.width=frameWidth1;
//use ROI to implement the video split joint
cvSetImageROI(newFrame, rect);
cvCopyImage(frame1, newFrame);
cvResetImageROI(newFrame);
rect.x = frameWidth1;
rect.y=0;
rect.height = frameHeight1;
rect.width = frameWidth1;
cvSetImageROI(newFrame, rect);
cvCopyImage(frame2, newFrame);
cvResetImageROI(newFrame);
cvWriteFrame(pWriter, newFrame);
}
/*cvReleaseImage(&frame1);
cvReleaseImage(&frame2); */
cvReleaseImage(&newFrame);
cvReleaseVideoWriter(&pWriter);
frame1 = NULL;
frame2 = NULL;
return FALSE;
}
opencv avi视频文件简单拼接
最新推荐文章于 2023-08-18 16:57:20 发布