一、前言-简介

在试验中需要常常将实验结果进行保存,在opencv中提供很好用的录制视频的句柄,也可称之为类-videowriter。

videowriter应用那是相当的简单,总之分为三步:

//声明
VideoWriter writer;
//打开
writer.open("C:\\Users\\lenovo\\Documents\\04.avi",CV_FOURCC('M', 'J', 'P', 'G'),
rate, //不进行跟踪,定位,只显示、录制时的帧率
Size(inFrame.cols,inFrame.rows),
true);
if (!writer.isOpened())
{
return;
}
//输入
writer<<inFrame;
//释放
writer.release();

open ( const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1 );

  •   filename 输出视频文件名。
  • fourcc为 四个字符用来表示压缩帧的codec 例如:
    • CV_FOURCC('P','I','M','1') = MPEG-1 codec
    • CV_FOURCC('M','J','P','G') = motion-jpeg codec
    • CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
    • CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
    • CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
    • CV_FOURCC('U', '2', '6', '3') = H263 codec
    • CV_FOURCC('I', '2', '6', '3') = H263I codec
    • CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
    • 若编码器代号为 -1,则运行时会弹出一个编码器选择框.
  • fps 被创建视频流的帧率。
  • frame_size 视频流的大小。
    • is_color 如果非零,编 码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。

二、应用难点

应用中出现的问题归结为:

  • 1、打不开
  • 2、保存文件为空
  • 3、保存的文件打不开

1、打不开

a、输入路径名称不对

在程序中经常遇到打不开的问题,最常见的问题是路径输入不对比如:

strvideoFile = "C:\Users\lenovo\Documents\visual studio 2010\TestMyClass\Testopencv\3.avi

上述代码中赋值操作,因为转义符的原因读入内存中,路径就会出现问题,结果为:

C:UserslenovoDocumentsisual studio 2010TestMyClassTestopencv.avi

当然打不开了,所以在程序中一定注意转义符的问题。

正确的路径命名方式为:

strvideoFile = "C:/Users/lenovo/Documents/visual studio 2010/TestMyClass/Testopencv/3.avi";
strvideoFile = "C:\\Users\\lenovo\\Documents\\visual studio 2010\\TestMyClass\\Testopencv\\3.avi";

b、编码格式不对

在open函数中第二个参数是编码格式,一定按照提供的编码格式进行填写,在应用中最好的解决方法是为-1。当为-1时,程序对弹出如下对话框供你选择

这样就没有问题啦,很容易解决编码问题。

2、保存文件为空

这种问题往往是后缀名不对,自己试过.Mp4没有成功,后来改为.avi就成功了

3、保存文件打不开

其实注意上面两个问题,就可以进行录制视频了,在录制视频无法打开打开问题,这个就不好排查了。

但可以讲一下自己遇到的问题:

最常见的问题是帧率设置不对,已经帧大小不对。

三、实例代码

string strimgfile,strvideoFile ;
/*strimgfile = "C:\Users\lenovo\Documents\visual studio 2010\TestMyClass\Testopencv\12.png";
strvideoFile = "C:\Users\lenovo\Documents\visual studio 2010\TestMyClass\Testopencv\3.avi";*/
strimgfile = "C:/Users/lenovo/Documents/visual studio 2010/TestMyClass/Testopencv/12.png";
//strvideoFile = "C:/Users/lenovo/Documents/visual studio 2010/TestMyClass/Testopencv/3.avi";
//strvideoFile = "C:\\Users\\lenovo\\Documents\\visual studio 2010\\TestMyClass\\Testopencv\\3.avi";
//strimgfile = "12.png";
//strvideoFile = "3.avi";
strvideoFile = "C:\Users\lenovo\Documents\visual studio 2010\TestMyClass\Testopencv\3.avi";
Mat frame = imread(strimgfile);
namedWindow("图像");
imshow("图像",frame);
namedWindow("视频");
VideoCapture capture;
VideoWriter writer;
capture.open(strvideoFile);
Mat inFrame; if (!capture.isOpened())
{
return;
}
int rate = capture.get(CV_CAP_PROP_FPS);
int delay = 1000/rate;
capture>>inFrame;
writer.open("C:\\Users\\lenovo\\Documents\\04.avi",CV_FOURCC('M', 'J', 'P', 'G'),
rate, //不进行跟踪,定位,只显示、录制时的帧率
Size(inFrame.cols,inFrame.rows),
true);
if (!writer.isOpened())
{
return;
}
while(true)
{
capture>>inFrame;
writer<<inFrame;
imshow("视频",inFrame);
waitKey(delay);
if (!capture.grab())
{
break;
}
}
writer.release();
system("pause");

opencv基础知识-videowriter的更多相关文章

  1. opencv基础知识------IplImage, CvMat, Mat 的关系和相互转换

    Mat,cvMat和IplImage这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化.而CvMat和IplImage类型更侧重于“图像 ...

  2. OpenCV基础知识介绍

    1.图像与矩阵 一般来说,图像是一个标准的矩形,有着宽度(width)和高度(height).而矩阵有着行(row)和列(column),矩阵的操作在数学和计算机中的处理都很常见且成熟,于是很自然的就 ...

  3. Opencv基础知识-----视频的读取和操作

    Opencv读取视频代码 #include "stdafx.h" #include"highgui.h"   int main(int argc,char* a ...

  4. OpenCV 基础知识------图像创建、访问、转换

    cvCreateImage函数-- Cxcore数组操作 创建头并分配数据 IplImage* cvCreateImage( CvSize size, int depth, int channels ...

  5. openCV基础知识

    openCV主体分为5个模块: CV图像处理函数和计算机视觉算法: ML机器学习库,包含许多聚类和数据分析函数: HighGUI图像和视频的输入输出: [分成三部分:硬件部分--摄像机;文件部分--载 ...

  6. AI-图像基础知识-01

        目前人工智能Artificial Intelligence主要分为两大分支: 计算机视常见:Computer Vision,简称CV   CV主要是研究如何让机器看懂世界的一种技术,通过各种光 ...

  7. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  8. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  9. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

随机推荐

  1. 如何用JavaScript在浏览器端获取图片的原始尺寸大小?

    var img = $("#img_id"); // Get my img elem var pic_real_width, pic_real_height; $("&l ...

  2. python登录豆瓣,发帖

    学习了urllib.urllib2及cookielib常用方法的使用登录豆瓣,由于有验证码,采取的办法是将验证码图片下载到同目录下,查看图片后输入验证码即可登录.发帖帖子内容写死在代码中了 [Pyth ...

  3. Mysql 批量建表存储过程

    最近项目中用到了使用存储过程批量建表的功能,记录下来: USE db_test_3; drop procedure if EXISTS `createTablesWithIndex`; create ...

  4. 通过Hibernate将数据库在myeclipse中逆向生成

    1.首先准备好数据库. 2.在MyEclipse的右上角切换透视图,切换到MyEclipse Database Explorer 3.在最左边点击右键,选择New(也就是新建一个数据库连接),然后编写 ...

  5. 【HDOJ】1050 Moving Tables

    贪心问题,其实我觉得贪心就是合理的考虑最优情况,证明贪心可行即可.这题目没话多久一次ac.这道题需要注意房间号的奇偶性.1 3.2 4的测试数据.答案应该为20. #include <stdio ...

  6. mysql导出csv/excel文件的几种方法,mysql的load导入csv数据

    方法一 php教程用mysql的命令和shell select * into outfile './bestlovesky.xls' from bestlovesky where 1 order by ...

  7. 更新你的jar包

    jar文件:/home/resin.jar需更新包中com/caucho/server/port/Port.class类文件 方法1:jar uf resin.jar com/caucho/serve ...

  8. poj1724ROADS(BFS)

    链接 本来想写spfa 加点什么限制什么的可能就过了 写着写着就成裸BFS了 也没优化就水过了 #include <iostream> #include<cstdio> #in ...

  9. Hadoop MapReduce 二次排序原理及其应用

    关于二次排序主要涉及到这么几个东西: 在0.20.0 以前使用的是 setPartitionerClass setOutputkeyComparatorClass setOutputValueGrou ...

  10. POI导出数据内存溢出问题

    POI之前的版本不支持大数据量处理,如果数据过多则经常报OOM错误,有时候调整JVM大小效果也不是太好.3.8版本的POI新出来了SXSSFWorkbook,可以支持大数据量的操作,只是SXSSFWo ...