带进度条控制的视频读取与存储

来源:互联网 发布:日语学习软件 编辑:程序博客网 时间:2024/06/11 22:17
#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");}
0 0
原创粉丝点击