c/c++利用opencv读取文件夹中的视频,并将视频的rgb信息按照视频名保存在另一个文件夹下
时间: 2024-02-10 17:10:30 浏览: 68
基于opencv读取一个文件夹下所有图像并显示
5星 · 资源好评率100%
您可以按照以下代码实现这个功能:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
string path = "path/to/folder/"; // 视频所在的文件夹路径
string save_path = "path/to/save/folder/"; // 保存视频RGB信息的文件夹路径
vector<String> video_files; // 用于保存文件夹中的视频名
glob(path, video_files, false); // 获取文件夹中的视频名
vector<int> compression_params; // 用于视频编码
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
compression_params.push_back(100);
for (size_t i = 0; i < video_files.size(); i++)
{
string video_name = video_files[i];
VideoCapture cap(video_name); // 打开视频
if (!cap.isOpened()) // 判断视频是否成功打开
{
cout << "Could not open the video file " << video_name << endl;
continue;
}
string save_name = save_path + video_name.substr(video_name.find_last_of("/\\") + 1); // 获取RGB信息保存的文件名
Mat frame;
vector<Mat> channels(3); // 用于保存RGB信息的三个通道
while (true)
{
cap >> frame; // 读取视频帧
if (frame.empty()) // 判断视频是否结束
break;
split(frame, channels); // 分离三个通道的RGB信息
imwrite(save_name + "_R_" + to_string(int(cap.get(CAP_PROP_POS_FRAMES))) + ".jpg", channels[0], compression_params); // 保存R通道的RGB信息
imwrite(save_name + "_G_" + to_string(int(cap.get(CAP_PROP_POS_FRAMES))) + ".jpg", channels[1], compression_params); // 保存G通道的RGB信息
imwrite(save_name + "_B_" + to_string(int(cap.get(CAP_PROP_POS_FRAMES))) + ".jpg", channels[2], compression_params); // 保存B通道的RGB信息
//imshow("frame", frame); // 在窗口中显示视频帧
//waitKey(1);
}
cout << "RGB information of video " << video_name << " has been saved in " << save_name << endl;
}
return 0;
}
```
该代码利用OpenCV库中的VideoCapture和imwrite函数,以及split函数将视频的RGB信息分离并保存为三个文件。RGB信息的保存文件名为:视频名_R(或G或B)_帧数.jpg。注意,本代码只能处理后缀为mp4的视频文件,如果处理其他格式的视频文件需要修改代码。
阅读全文