用opencv c/c++ 转换成灰度图,然后做一下直方图均衡输出mp4文件,为啥保存后的视频是0kb
4条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
这个问题可能涉及到多个方面,包括代码的实现问题、视频格式支持问题、保存路径问题等。以下是我根据问题提供的一些分析和建议。假设你已经正确地实现了视频转换到灰度图和直方图均衡化的过程,但在保存视频时遇到了问题。以下是可能的原因和解决方案:
- 文件保存路径或文件名错误: 检查你的代码是否正确指定了视频文件的保存路径和文件名。如果路径错误或文件名的格式不正确,可能会导致无法保存文件或保存的文件无法被正确识别。
- 视频格式不支持: 确保你保存的视频格式(如MP4)是OpenCV支持的格式。虽然OpenCV通常支持多种视频格式,但如果使用了某些特定的编码或参数,可能会导致无法正确保存。
- 编码问题: 在使用OpenCV保存视频时,确保你正确设置了视频的编码参数。错误的编码参数可能会导致视频文件损坏或无法播放。
- 内存问题: 确保程序在运行过程中有足够的内存。如果内存不足,可能会导致视频文件保存不完整或无法保存。
针对这些可能的问题,以下是一个基本的代码示例,展示了如何使用OpenCV的C++ API将视频转换为灰度并进行直方图均衡化,然后保存为MP4文件:
#include <opencv2/opencv.hpp> #include <iostream> int main() { cv::VideoCapture cap("input_video.mp4"); // 输入视频路径 if (!cap.isOpened()) { std::cerr << "无法打开输入视频文件" << std::endl; return -1; } cv::VideoWriter writer("output_video.mp4", cv::VideoWriter::fourcc('M','J','P','G'), cap.get(cv::CAP_PROP_FPS), cv::Size(cap.get(cv::CAP_PROP_FRAME_WIDTH), cap.get(cv::CAP_PROP_FRAME_HEIGHT))); // 输出视频参数设置,包括格式、帧率、尺寸等 if (!writer.isOpened()) { std::cerr << "无法创建输出视频文件" << std::endl; return -1; } cv::Mat frame, gray, equalized; while (true) { cap >> frame; // 读取一帧视频 if (frame.empty()) break; // 如果帧为空,跳出循环 cvtColor(frame, gray, cv::COLOR_BGR2GRAY); // 转换为灰度图 equalizeHist(gray, equalized); // 直方图均衡化 writer.write(equalized); // 写入均衡化后的帧到输出视频文件 } writer.release(); // 释放资源 cap.release(); // 释放资源 return 0; }
请确保你的开发环境已经正确配置了OpenCV库,并且输入的视频文件路径是正确的。此外,请检查你的计算机是否支持MP4编码,如果不支持,你可能需要安装额外的编解码器或更改输出格式。如果问题仍然存在,请提供更多关于你的代码和环境的信息,以便我能更准确地诊断问题。
解决评论 打赏 举报 编辑记录无用 1
悬赏问题
- ¥200 csgo2的viewmatrix值是否还有别的获取方式
- ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
- ¥15 请把下列每一行代码完整地读懂并注释出来
- ¥15 pycharm运行main文件,显示没有conda环境
- ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
- ¥15 为什么eclipse不能再下载了?
- ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
- ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
- ¥15 特定网页无法访问,已排除网页问题
- ¥50 如何将脑的图像投影到颅骨上