#include <iostream>
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
using namespace std;
//初始化进度条位置
int g_slider_position1=0;
int g_slider_position2=0;
CvCapture* g_capture1=NULL;
CvCapture* g_capture2=NULL;
//定义回调函数播放进度条的控制
void onTrackbarSlider1(int pos1)
{
cvSetCaptureProperty(g_capture1,CV_CAP_PROP_POS_FRAMES,pos1);
}
void onTrackbarSlider2(int pos2)
{
cvSetCaptureProperty(g_capture2,CV_CAP_PROP_POS_FRAMES,pos2);
}
void main()
{
cvNamedWindow("Video Test 1",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Video Test 2",CV_WINDOW_AUTOSIZE);
char* filename1="Sample1.avi"; //要读取的视频名称
char* filename2="Sample2.avi";
//捕捉视频文件
g_capture1=cvCreateFileCapture(filename1);
g_capture2=cvCreateFileCapture(filename2);
//读取、显示视频文件的帧数
int frames1=(int)cvGetCaptureProperty(g_capture1,CV_CAP_PROP_FRAME_COUNT);
cout<<"frame1="<<frames1<<endl;
//建立进度条
if (frames1!=0)
{
cvCreateTrackbar("Position","Video Test 1",&g_slider_position1,frames1,onTrackbarSlider1);
}
int frames2=(int)cvGetCaptureProperty(g_capture2,CV_CAP_PROP_FRAME_COUNT);
cout<<"frame2="<<frames2<<endl;
if (frames2!=0)
{
cvCreateTrackbar("Position","Video Test 2",&g_slider_position2,frames2,onTrackbarSlider2);
}
//读取视频文件信息
double fps1=(int)cvGetCaptureProperty(g_capture1,CV_CAP_PROP_FPS);
double fps2=(int)cvGetCaptureProperty(g_capture2,CV_CAP_PROP_FPS);
CvSize size1=cvSize((int)cvGetCaptureProperty(g_capture1,CV_CAP_PROP_FRAME_WIDTH),(int)cvGetCaptureProperty(g_capture1,CV_CAP_PROP_FRAME_HEIGHT));
CvSize size2=cvSize((int)cvGetCaptureProperty(g_capture2,CV_CAP_PROP_FRAME_WIDTH),(int)cvGetCaptureProperty(g_capture2,CV_CAP_PROP_FRAME_HEIGHT));
//创建VideoWriter
char *savefile1="save1.avi";
char *savefile2="save2.avi";
CvVideoWriter* wrVideo1=cvCreateVideoWriter(savefile1,CV_FOURCC('M','J','P','G'),fps1,size1);
CvVideoWriter* wrVideo2=cvCreateVideoWriter(savefile2,CV_FOURCC('M','J','P','G'),fps2,size2);
int frs=0;
//开始播放并保存视频
IplImage* frame1;
IplImage* frame2;
while (frs<frames1&& frs<frames2)
{
//获取,显示源文件的帧画面
frame1=cvQueryFrame(g_capture1);
if (!frame1)
{
break;
}
cvShowImage("Video Test 1",frame1);
frame2=cvQueryFrame(g_capture2);
if (!frame2)
{
break;
}
cvShowImage("Video Test 2",frame2);
//保存:将当前帧写入到目标视频文件
cvWriteFrame(wrVideo1,frame1);
cvWriteFrame(wrVideo2,frame2);
//若按下ESC键,则退出程序
char c=cvWaitKey(37);
if (c==27)
{
break;
}
}
//释放内存,关闭窗口
cvReleaseCapture(&g_capture1);
cvReleaseCapture(&g_capture2);
// cvReleaseVideoWriter(&wrVideo1);
// cvReleaseVideoWriter(&wrVideo2);
cvDestroyWindow("Video Test 1");
cvDestroyWindow("Video Test 2");
}
带进度条控制的视频读取与存储
最新推荐文章于 2021-02-27 04:00:24 发布