opencv中视频的保存(两个版本的)

在对视频进行处理时,很多需要保存处理后的结果,因而想借助于opencv将处理过后的视频保存下来。opencv中保存视频的方式分为 VideoWriter和CvVideoWriter两个版本的,其中前者是对应Mat,后者对应的是IplImage*的。现在多用的是前者,但很多较老的代码中还是用的CvVideoWriter这中方式的,本文对这两种都简要介绍一下。首先是VideoWriter,基本就是将视频的每一帧读入到要保存的视频中。

#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
  
using namespace cv;  
  
void main()  
{  
    VideoCapture capture(0);  
   VideoWriter writer("VideoTest.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));  
  
 
    while (capture.isOpened())  
    {  
  Mat frame;  
     
if ((frame.rows==0)||(frame.cols==0))
{
printf("frame capture failed\n");
system("pause");
exit(0);
}
        capture >> frame;  
        writer << frame;  
        imshow("video", frame);  
        if (cvWaitKey(20) == 27)  
        {  
            break;  
        }  
    }  
}  

其中VideoWriter writer("VideoTest.avi", CV_FOURCC('M''J''P''G'), 25.0, Size(640, 480));这一行代码中后面的两个参数分别是帧率与保存视频的宽和高。一般可利用下列两行代码获取,上述示例代码中为了方便,直接用的指定的值。

int rate = capture.get(CV_CAP_PROP_FPS);//帧率
writer.open("C:\\Users\\lenovo\\Documents\\04.avi",CV_FOURCC('M', 'J', 'P', 'G'),rate,Size(frame.cols,frame.rows),true);


第二中就是CvVideoWriter,其代码也基本一样,只是老版本的opencv中的用法。

    char videoName[128] = "F://test//test1.mp4";//要处理的视频
    char reslutVideoName[128] = "F://result//result3.avi";//处理好保存的视频,只能保存为AVI格式

    CvCapture* capture0 = cvCaptureFromFile(videoName);
    if (!capture0) {
        fprintf(stderr, "Couldn't initialize capturing....\n");
    }

    CvSize size = cvSize(
        (int)cvGetCaptureProperty(capture0, CV_CAP_PROP_FRAME_WIDTH),
        (int)cvGetCaptureProperty(capture0, CV_CAP_PROP_FRAME_HEIGHT));

    // video writer
    CvVideoWriter* writer = cvCreateVideoWriter(reslutVideoName, CV_FOURCC('M', 'J', 'P', 'G'), 25,size);
    IplImage* frame = NULL;
    while(1)
    {
        frame = cvQueryFrame(capture0);
        if (NULL == frame) {
            break;
        }
    //中间省略对frame进行处理的代码
        cvWriteFrame(writer, frame);
    }
上述的代码都是从我从自己的代码中截取出与保存视频相关的片段的,应该是可以运行的。(我自己的工程可以成功运行并保存处理后的视频)



  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值