OpenCV视频I/O(19)视频写入类VideoWriter之释放 VideoWriter 对象占用的资源函数release()的使用

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

算法描述

关闭视频编写器。
该方法会在后续的 VideoWriter::open 调用和 VideoWriter 析构函数调用时自动调用。
cv::VideoWriter::release() 函数用于释放 VideoWriter 对象占用的资源。

函数原型

virtual void cv::VideoWriter::release	(		)	

参数

此函数不接受任何参数

代码示例


#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>

int main() {
    // 设置视频的宽度和高度
    int frameWidth = 640;
    int frameHeight = 480;

    // 设置视频编码器的 FourCC 代码
    // 使用 XVID 编码器作为替代方案
    int fourcc = cv::VideoWriter::fourcc('X', 'V', 'I', 'D');

    // 创建 VideoWriter 对象
    cv::VideoWriter writer;

    // 初始化 VideoWriter 对象
    bool isOpened = writer.open("output.avi", fourcc, 25, cv::Size(frameWidth, frameHeight), true);

    if (!isOpened) {
        std::cerr << "Failed to initialize the video writer." << std::endl;
        return -1;
    }

    // 创建一个示例帧
    cv::Mat frame = cv::Mat::zeros(frameHeight, frameWidth, CV_8UC3);

    // 写入一帧到视频文件
    writer.write(frame);

    // 释放资源
    writer.release();

    return 0;
}
OpenCV(C++版)中,`cv::VideoWriter` 用于将序列帧(如图片)保存为视频文件。以下是将几张图片转换为视频的基本步骤: 1. **包含头文件**: 首先,你需要包含 `opencv2/videoio.hpp` 和 `opencv2/highgui.hpp` 文件,这两个头文件包含了 `VideoWriter` 和 `imread` 等函数。 ```cpp #include <opencv2/videoio/videoio.hpp> #include <opencv2/highgui/highgui.hpp> ``` 2. **创建 VideoWriter 实例**: 初始化 `VideoWriter` 对象,指定要保存的视频文件路径、编码器型、帧率和帧尺寸。 ```cpp cv::Size frame_size(width, height); // 填写图像宽度和高度 cv::VideoWriter writer(filename, cv::FOURCC('M','J','P','G'), fps, frame_size); ``` 这里 `FOURCC('M','J','P','G')` 表示使用 MJPEG 编码,可以根据需要选择其他编码器,比如 `'XVID'` 或 `'MP4V'`。 3. **读取并写入图片**: 循环遍历你要转换成视频的图片,读取每张图片,然后通过 `writer.write()` 方法将其写入视频文件。 ```cpp for (int i = 0; i < num_images; ++i) { cv::Mat img = imread("image_" + std::to_string(i) + ".jpg"); // 替换为实际图片路径 if (!img.data) { // 检查是否成功读取 std::cout << "Failed to read image " << i << std::endl; break; } writer.write(img); } ``` 4. **释放资源**: 在所有图片处理完毕后,记得关闭 `VideoWriter`。 ```cpp writer.release(); ``` 5. **错误检查**: 在整个过程中,可能遇到文件无法打开或其他IO错误,所以最好添加适当的异常处理。 如果图片不是连续的一系列,上述流程可能会有变化。如果有多余的操作(例如预处理、变换等),也需要在适当的地方加入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值