OpenCV视频I/O(18)视频写入类VideoWriter之初始化 VideoWriter 对象的函数open()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

初始化或重新初始化视频编写器。
该方法打开视频编写器。参数与构造函数 VideoWriter::VideoWriter 中的相同。
cv::VideoWriter::open() 函数用于初始化 VideoWriter 对象,使其能够将视频帧写入文件或视频流。

函数原型1


virtual bool cv::VideoWriter::open
(
	const String & 	filename,
	int 	fourcc,
	double 	fps,	
	Size 	frameSize,	
	bool 	isColor = true 
)		

参数1

  • 参数 filename:输出视频文件的路径或名称。
  • 参数 fourcc:四字符代码(FourCC code),用于指定视频编码器。
  • 参数fps:视频的帧率(每秒帧数)。
  • 参数frameSize:视频帧的大小(宽度和高度)。
  • 参数isColor:布尔值,表示视频是否为彩色,默认值为 true(彩色视频)。

函数原型2

这是一个重载的成员函数,提供方便。它与上述函数的不同仅在于接受的参数。


bool cv::VideoWriter::open
(
	const String & 	filename,
	int 	apiPreference,
	int 	fourcc,
	double 	fps,
	Size 	frameSize
### OpenCVVideoWriter 函数使用说明 #### 一、VideoWriter 概述 `VideoWriter` 是 OpenCV 提供的一个,用于将一系列图像帧保存到视频文件中。该位于 `highgui.hpp` 文件中,并提供了多个成员函数来控制视频录制过程[^1]。 主要功能包括: - 初始化视频写入器。 - 设置编码方式(FourCC)、帧率以及分辨率。 - 将图像帧逐帧写入目标视频文件。 --- #### 二、构造函数初始化方法 `VideoWriter` 的构造函数可以用来创建一个新的对象实例: ```cpp VideoWriter(const String& filename, int apiPreference, int fourcc, double fps, const Size& frameSize, bool isColor=true); ``` ##### 参数详解: 1. **filename**: 输出视频文件名及其路径。 2. **apiPreference**: API 后端偏好设置,默认情况下可忽略此参数。 3. **fourcc**: 编码格式标志符,通常由四个字符组成(如 `'XVID'`, `'MJPG'`)。可以通过 `cv::VideoWriter::fourcc()` 方法生成 FourCC 值[^2]。 4. **fps**: 录制视频的目标帧率(每秒多少帧)。 5. **frameSize**: 单帧图像大小,指定为宽度和高度组成的二维尺寸结构体 `cv::Size(width, height)`。 6. **isColor**: 是否彩色模式(默认为 true),如果设为 false,则会以灰度模式记录视频。 示例代码如下所示: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { // 定义输出视频文件名称和其他属性 std::string outputFileName = "output_video.avi"; int codec = cv::VideoWriter::fourcc('M', 'J', 'P', 'G'); // MJPEG 编码 double framesPerSecond = 30; cv::Size videoResolution(640, 480); // 创建并初始化 VideoWriter 对象 VideoWriter writer(outputFileName, codec, framesPerSecond, videoResolution, true); if (!writer.isOpened()) { // 检查是否成功打开 std::cerr << "Error: Could not open the output video file." << std::endl; return -1; } // 循环模拟写入若干帧数据 Mat frame(videoResolution.height, videoResolution.width, CV_8UC3, Scalar(0, 0, 255)); // 红色背景测试图 for (size_t i = 0; i < 100; ++i) { putText(frame, std::to_string(i), Point(50, 50), FONT_HERSHEY_SIMPLEX, 1, Scalar(255, 255, 255)); writer.write(frame); // 写入单帧至视频流 } writer.release(); // 关闭资源释放内存 return 0; } ``` 上述程序展示了如何通过 `VideoWriter` 构造函数完成基本配置,并利用循环向视频文件追加固定数量的红色底板图片作为演示内容[^4]。 --- #### 三、常用成员函数解析 以下是几个重要的成员函数介绍: 1. **open()** 手动调用以重新开启新的视频文件连接操作。其签名形式同构造函数一致。 2. **isOpened()** 判断当前实例是否已经准备好接受后续处理命令。返回布尔值表示状态正常与否[^1]。 3. **write() 或者重载运算符<<** 接受输入矩阵型的单张画面素材,将其附加到最终产物之中去[^1]。 4. **release()** 显式结束录像进程清理内部缓冲区等必要工作步骤[^3]。 --- #### 四、注意事项 当尝试运行涉及 GPU 加速版本时需要注意额外依赖库加载情况;另外不同平台支持的具体编解码方案可能存在差异,请务必查阅官方文档确认兼容性列表[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村北头的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值