opencv基础知识-videowriter
一、前言-简介
在试验中需要常常将实验结果进行保存,在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的更多相关文章
- opencv基础知识------IplImage, CvMat, Mat 的关系和相互转换
Mat,cvMat和IplImage这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化.而CvMat和IplImage类型更侧重于“图像 ...
- OpenCV基础知识介绍
1.图像与矩阵 一般来说,图像是一个标准的矩形,有着宽度(width)和高度(height).而矩阵有着行(row)和列(column),矩阵的操作在数学和计算机中的处理都很常见且成熟,于是很自然的就 ...
- Opencv基础知识-----视频的读取和操作
Opencv读取视频代码 #include "stdafx.h" #include"highgui.h" int main(int argc,char* a ...
- OpenCV 基础知识------图像创建、访问、转换
cvCreateImage函数-- Cxcore数组操作 创建头并分配数据 IplImage* cvCreateImage( CvSize size, int depth, int channels ...
- openCV基础知识
openCV主体分为5个模块: CV图像处理函数和计算机视觉算法: ML机器学习库,包含许多聚类和数据分析函数: HighGUI图像和视频的输入输出: [分成三部分:硬件部分--摄像机;文件部分--载 ...
- AI-图像基础知识-01
目前人工智能Artificial Intelligence主要分为两大分支: 计算机视常见:Computer Vision,简称CV CV主要是研究如何让机器看懂世界的一种技术,通过各种光 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
随机推荐
- Viz World and Viz Curious Maps 教程 -- 基础篇
0. 开篇之前的一些废话 本文的内容是之前因为一些原因而写的,现在打算分享出来,内容就不做更改纯迁移了…毕竟我也太久没摸过加密狗了( ╯□╰ ).内容定位是教程,对应的 Curious World M ...
- about js
function: javascript jquery modernizr yepnope code organization requirejs backbonejs http://blog.csd ...
- Spring+MyBatis实践—中文乱码
多种中文乱码问题及解决: jsp页面乱码 表单提交乱码 URL中文参数乱码 1.jsp页面乱码解决(2步): 新建jsp页面: <%@ page language="java" ...
- ORMBase对象/关系型数据库映射在MVC中的应用
ORM这个字眼在我们操作数据库的时候,是我们使用频率最高的.它到底是个什么东西呢,我们先来看看一些对它的含义解释. 对象/关系数据库映射(object/relational mapping(ORM)) ...
- Windows server 2008下开启telnet功能
今天在windows server 2008 R2下使用telnet 来测试端口是否可以连接,结果发现如下错误:
- [杂题]CSUOJ1274Balls and Boxes
题目链接 题意:中文题 题意不多赘述 值得注意的是n<m 不必考虑n==m的情况 (m是盒子个数, n是每次选取的盒子个数, 不要弄反了!) 这题一看就是同余方程 每次选取n个盒子放球 也就是说 ...
- asp中将文本框内的日期转换成datetime类型的数据
将字符类型的日期转化为DateTime类型主要有以下方法: 方法一:Convert.ToDateTime(string) string格式有要求,必须是yyyy-MM-dd hh:mm:ss 方法二: ...
- leetcode面试准备:Simplify Path
leetcode面试准备:Simplify Path 1 题目 Given an absolute path for a file (Unix-style), simplify it. For exa ...
- S3C2410 实验三——跑马灯实验
http://www.evernote.com/shard/s307/sh/f2a748e7-34c4-4ce6-acac-82a756cc9e82/ad5813188d655e504857970db ...
- Webform和MVC,为什么MVC更好一些?
前言 如果你看了最近微软的议程,你会发现他们现在的焦点除了MVC,还是MVC.问题在于为什么微软如此热衷于丢弃传统的APS.NET Webform而转向ASP.NET MVC?本文就主要来讨论这个问题 ...