目录
引言
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,广泛应用于图像和视频处理、面部识别、物体检测等多个领域。本文将详细介绍OpenCV中的视频读写技术,包括VideoCapture
和 VideoWriter
类和相关函数,并通过代码示例展示如何读取和写入视频文件。
视频读取技术
VideoCapture 类
cv::VideoCapture
是OpenCV中用于处理视频输入的类,它可以从摄像头、视频文件或图像序列中读取帧。以下是该类的主要方法和用法。
构造函数
cv::VideoCapture::VideoCapture(const string& filename)
: 通过文件路径打开视频文件。cv::VideoCapture::VideoCapture(int device)
: 通过设备ID打开摄像头,默认摄像头ID为0。
常用方法
bool isOpened() const
: 检查视频是否成功打开。bool read(OutputArray image)
: 读取视频中的一帧,并将其存储在Mat对象中。void release()
: 释放VideoCapture对象所占用的资源。double get(int propId)
: 获取视频属性,如帧率、宽度、高度等。bool set(int propId, double value)
: 设置视频属性,如帧率、宽度、高度等。
视频写入技术
VideoWriter 类
cv::VideoWriter
是OpenCV中用于将图像帧序列保存为视频文件的类。在创建视频文件时,需要指定文件名、编解码器、帧率、宽度和高度等参数。
构造函数
cv::VideoWriter::VideoWriter(const string& filename, int fourcc, double fps, Size frameSize, bool isColor=true)
:filename
: 视频文件的名称和路径。fourcc
: 编解码器,如CV_FOURCC('M','J','P','G')
表示MJPG编解码器。fps
: 视频的帧率。frameSize
: 视频帧的大小。isColor
: 视频图像是否为彩色(默认为true)。
常用方法
bool isOpened() const
: 检查VideoWriter对象是否成功打开。void write(InputArray image)
: 将一帧图像写入视频文件。void release()
: 释放VideoWriter对象所占用的资源。
示例代码:读写视频文件
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
// 读取原视频文件
VideoCapture vcap("video.mp4");
// 读取视频的帧的宽度和高度 \ 帧
int fvwidth = vcap.get(CAP_PROP_FRAME_WIDTH);
int fvheight = vcap.get(CAP_PROP_FRAME_HEIGHT);
double fvfps = vcap.get(CAP_PROP_FPS);
// 通过cout输出获取参数值
cout << "宽度:" << fvwidth << endl;
cout << "高度:" << fvheight << endl;
cout << "帧:" << fvfps << endl;
// 录制MP4视频
VideoWriter vw("writermp4.mp4", vcap.get(CAP_PROP_FOURCC), fvfps, Size(fvwidth, fvheight));
Mat fm;
while (1)
{
vcap.read(fm);
if (fm.empty())
{
break;
}
vw.write(fm);
imshow("测试:录制视频中", fm);
int key = waitKey(1);
if (key == 27)
{
break;
}
}
vcap.release();
vw.release();
waitKey(0);
return 0;
}
OpenCV 的 VideoCapture
和 VideoWriter
类为视频读写提供了强大而灵活的功能。通过这两个类,可以轻松实现从视频文件或摄像头捕获视频帧,以及将处理后的帧写入视频文件。