OPenCV高级编程——OpenCV视频读写技术详解

目录

引言

视频读取技术

VideoCapture 类

构造函数

常用方法

视频写入技术

VideoWriter 类

构造函数

常用方法

 示例代码:读写视频文件


引言

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 类为视频读写提供了强大而灵活的功能。通过这两个类,可以轻松实现从视频文件或摄像头捕获视频帧,以及将处理后的帧写入视频文件。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值