视频读写
介绍 OpenCV 读写视频之前,先介绍一下编解码器(codec)。如果是图像文
件,我们可以根据文件扩展名得知图像的格式。但是此经验并不能推广到视频文
件中。有些 OpenCV 用户会碰到奇怪的问题,都是 avi 视频文件,有的能用 OpenCV
打开,有的不能。
视频的格式主要由压缩算法决定。压缩算法称之为编码器(coder),解压算
法称之为解码器(decoder),编解码算法可以统称为编解码器(codec)。视频文
件能读或者写,关键看是否有相应的编解码器。编解码器的种类非常多,常用的
有 MJPG、XVID、DIVX 等,完整的列表请参考 FOURCC 网站3。因此视频文件的扩
展名(如 avi 等)往往只能表示这是一个视频文件。
OpenCV 2 中提供了两个类来实现视频的读写。读视频的类是 VideoCapture,
写视频的类是 VideoWriter。
读视频
videocapture:可以从视频读取图像,也可以从摄像头读取图像
可以通过构造函数打开摄像头或视频;
如果该类已经存在,则可以通过videocapture.open()打开;在open打开时,会自动调用release函数
videocapture重载了>>,可以实现逐帧读取功能
namedWindow(namedWindow()的功能就是新建一个显示窗口。可以指定窗口的类型。)
API详解:原型:void nameWindow(const string& winname,int flags = WINDOW_AUTOSIZE) ;
参数1:新建的窗口的名称。自己随便取。
参数2:窗口的标识,一般默认为WINDOW_AUTOSIZE 。
-
-
WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改。(上面图1就是使用的它)
-
WINDOW_NORMAL 用户可以改变这个窗口大小(上面图2就是使用的它)
-
WINDOW_OPENGL 窗口创建的时候会支持OpenGL
-
WindowFlags的元素的值有等于0和等于1的,如WINDOW_AUTOSIZE=1,WINDOW_NORMAL=0,一样的效果
写视频
使用 OpenCV 创建视频也非常简单,与读视频不同的是,你需要在创建视频
时设置一系列参数,包括:文件名,编解码器,帧率,宽度和高度等。编解码器
使用四个字符表示,可以是 CV_FOURCC('M','J','P','G')、CV_FOURCC('X','V','I','D')及
CV_FOURCC('D','I','V','X')等。如果使用某种编解码器无法创建视频文件,请尝试其
他的编解码器。
将图像写入视频可以使用 VideoWriter::write()函数,VideoWriter 类中也重载
了<<操作符,使用起来非常方便。另外需要注意:待写入的图像尺寸必须与创建
视频时指定的尺寸一致。
下面例程演示了如何写视频文件。本例程将生成一个视频文件,视频的第 0
帧上是一个红色的“0”,第 1 帧上是个红色的“1”,以此类推,共 100 帧。
创建实例:
Size s(320,240);
VideoWriter writer = VideoWriter("myvideo.avi",
CV_FOURCC('M','J','P','G'), 25, s);
检测函数:if(!writer.isOpened()):如果返回值为1,失败。
snprintf
函数原型:int snprintf(char* dest_str,size_t size,const char* format,...);
将可变参数 “…” 按照format的格式格式化为字符串,然后再将其拷贝至dest-str中。
puttext
void cv::putText(
cv::Mat& img, // 待绘制的图像
const string& text, // 待绘制的文字
cv::Point origin, // 文本框的左下角
int fontFace, // 字体 (如cv::FONT_HERSHEY_PLAIN)
double fontScale, // 尺寸因子,值越大文字越大
cv::Scalar color, // 线条的颜色(RGB)
int thickness = 1, // 线条宽度
int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)
bool bottomLeftOrigin = false // true='origin at lower left'
);
支持字体类型

point类
作为opencv的基础类型,point类可能是最简单的。它的实现基于一个基础模板结构(由自己的模板派生而来),也可以从固定向量类(cv::Vec<>)转换得到。

浙公网安备 33010602011771号