OpenCV读写视频文件

mind_programmonkey 2018-06-19 17:05
关注文章

读视频

VideoCapture 既可以从视频文件读取图像,也可以从摄像头读取图像。可以使用该类的构造函数打开视频文件或者摄像头。如果 VideoCapture 对象已经创建,也可以使用 VideoCapture::open()打开,VideoCapture::open()函数会自动调用VideoCapture::release()函数,先释放已经打开的视频,然后再打开新视频。如果要读一帧,可以使用 VideoCapture::read()函数。VideoCapture 类重载了>>操作符,实现了读视频帧的功能。下面的例程演示了使用 ideoCapture 类读视频。

#include 
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
 //打开第一个摄像头
 //VideoCapture cap(0);
 //打开视频文件
 VideoCapture cap("video.short.raw.avi");
//检查是否成功打开
 if(!cap.isOpened())
 {
 cerr << "Can not open a camera or file." << endl;
 return -1;
 }
 Mat edges;
 //创建窗口
 namedWindow("edges",1);
 for(;;)
 {
 Mat frame;
 //从 cap 中读一帧,存到 frame
 cap >> frame;
 //如果未读到图像
 if(frame.empty())
 break;
 //将读到的图像转为灰度图
 cvtColor(frame, edges, CV_BGR2GRAY);
 //进行边缘提取操作
 Canny(edges, edges, 0, 30, 3);
 //显示结果
 imshow("edges", edges);
 //等待 30 秒,如果按键则推出循环
 if(waitKey(30) >= 0)
 break;
 }
 //退出时会自动释放 cap 中占用资源
 return 0;
}

写视频

使用 OpenCV 创建视频也非常简单,与读视频不同的是,你需要在创建视频时设置一系列参数,包括:文件名,编解码器,帧率,宽度和高度等。编解码器 使用四个字符表示,可以是 CV_FOURCC('M','J','P','G')、CV_FOURCC('X','V','I','D')及CV_FOURCC('D','I','V','X')等。如果使用某种编解码器无法创建视频文件,请尝试其他的编解码器。

将图像写入视频可以使用 VideoWriter::write()函数,VideoWriter 类中也重载了<

#include 
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
 //定义视频的宽度和高度
 Size s(320, 240);
 //创建 writer,并指定 FOURCC 及 FPS 等参数
 VideoWriter writer = VideoWriter("myvideo.avi",
CV_FOURCC('M','J','P','G'), 25, s);
 //检查是否成功创建
 if(!writer.isOpened())
 {
 cerr &lt;&lt; "Can not create video file.\n" &lt;&lt; endl;
 return -1;
 }
 //视频帧
 Mat frame(s, CV_8UC3);
 for(int i = 0; i &lt; 100; i++)
 {
 //将图像置为黑色
 frame = Scalar::all(0);
 //将整数 i 转为 i 字符串类型
 char text[128];
 snprintf(text, sizeof(text), "%d", i);
 //将数字绘到画面上
 putText(frame, text, Point(s.width/3, s.height/3),
FONT_HERSHEY_SCRIPT_SIMPLEX, 3,
 Scalar(0,0,255), 3, 8);
 //将图像写入视频
 writer &lt;&lt; frame;
 }
 //退出程序时会自动关闭视频文件
 return 0;
}
文章被以下专辑收录
{{panelTitle}}
支持Markdown和数学公式,公式格式:\\(...\\)或\\[...\\]

还没有内容

关注微信公众号