0291. 2024-07-14 15:14 采纳率: 0%
浏览 20
已结题

用opencv c/c++ 转换成灰度图,然后做一下直方图均衡,输出mp4文件

#include <opencv2/opencv.hpp>用opencv c/c++ 转换成灰度图,然后做一下直方图均衡,输出mp4文件,但输出视频文件为0kb


#include <iostream>

int main() {
    cv::VideoCapture cap("D:\\视图\\sp\\标注使用.mp4");
    if (!cap.isOpened()) {
        std::cout << "Error opening video stream or file" << std::endl;
        return -1;
    }

    int codec = cv::VideoWriter::fourcc('m', 'p', '4', 'v');
    double fps = cap.get(cv::CAP_PROP_FPS);
    cv::Size size = cv::Size((int)cap.get(cv::CAP_PROP_FRAME_WIDTH), (int)cap.get(cv::CAP_PROP_FRAME_HEIGHT));

    cv::VideoWriter writer("output.mp4", codec, fps, size, true);

    cv::Mat frame, grayFrame, equalizedFrame;

    while (cap.read(frame)) {
        cv::cvtColor(frame, grayFrame, cv::COLOR_BGR2GRAY);
        cv::equalizeHist(grayFrame, equalizedFrame);

        writer.write(equalizedFrame);
    }

    cap.release();
    writer.release();

    return 0;
}


img

img

  • 写回答

29条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-14 15:14
    关注

    引自免费微信小程序:皆我百晓生

    要将视频转换为灰度图像并进行直方图均衡化,并将其保存为MP4格式,你需要按照以下步骤操作:

    步骤 1: 初始化OpenCV库

    首先,确保已经安装了OpenCV库(cv::),如果你还没有安装,可以通过下面的命令安装:

    pip install opencv-python
    

    步骤 2: 导入必要的模块

    在C/C++环境中,导入所需的模块:

    #include <opencv2/opencv.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    

    步骤 3: 打开视频流

    打开视频流,获取相关信息:

    cv::VideoCapture cap("D:/视图/sp/标注使用.mp4");
    if (!cap.isOpened()) {
        std::cerr << "Error opening video stream or file" << std::endl;
        return -1;
    }
    
    int codec = cv::VideoWriter::fourcc('m', 'p', '4', 'v'); // 使用默认编码器
    double fps = cap.get(cv::CAP_PROP_FPS);
    cv::Size size = cv::Size((int)cap.get(cv::CAP_PROP_FRAME_WIDTH), (int)cap.get(cv::CAP_PROP_FRAME_HEIGHT));
    

    步骤 4: 创建视频写入器

    创建一个用于存储转换后的视频的视频写入器:

    cv::VideoWriter writer("output.mp4", codec, fps, size, true);
    

    步骤 5: 读取帧并执行转换

    遍历视频帧并执行转换。

    while (cap.read(frame)) { // 每次读取一帧
        cv::cvtColor(frame, grayFrame, cv::COLOR_BGR2GRAY); // 将BGR颜色空间转换为灰度
        cv::equalizeHist(grayFrame, equalizedFrame); // 进行直方图均衡化
        writer.write(equalizedFrame); // 写入均衡化的灰度图像到视频中
    }
    

    步骤 6: 关闭所有资源

    关闭所有资源后释放内存。

    cap.release(); // 释放视频捕获设备
    writer.release(); // 释放视频写入器
    

    步骤 7: 输出MP4文件

    通过调用writer.release()释放资源,完成整个过程。

    完整的C/C++程序代码示例:

    #include <opencv2/opencv.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    
    int main() {
        cv::VideoCapture cap("D:/视图/sp/标注使用.mp4"); // 视频输入路径
        if (!cap.isOpened()) {
            std::cerr << "Error opening video stream or file" << std::endl;
            return -1;
        }
    
        int codec = cv::VideoWriter::fourcc('m', 'p', '4', 'v'); // 默认编码器
        double fps = cap.get(cv::CAP_PROP_FPS);
        cv::Size size = cv::Size((int)cap.get(cv::CAP_PROP_FRAME_WIDTH), (int)cap.get(cv::CAP_PROP_FRAME_HEIGHT));
    
        cv::VideoWriter writer("output.mp4", codec, fps, size, true); // 创建输出视频文件
    
        while (cap.read(frame)) { // 遍历每帧
            cv::cvtColor(frame, grayFrame, cv::COLOR_BGR2GRAY); // 将BGR转换为灰度
            cv::equalizeHist(grayFrame, equalizedFrame); // 进行直方图均衡化
            writer.write(equalizedFrame); // 将结果写入视频
        }
    
        cap.release(); // 释放摄像头
        writer.release(); // 释放视频写入器
    
        return 0;
    }
    

    这个程序将读取视频、执行转换、并保存为MP4格式。注意,这个例子是基于标准的OpenCV库编写的,可能需要根据你的具体需求进行调整。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月21日
  • 创建了问题 7月14日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上