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

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值