在opencv中如何加载数据集,然后分为训练集,测试集和验证集
时间: 2024-06-13 08:01:25 浏览: 155
在OpenCV中,可以使用cv::imread函数来读取图像数据,同时可以使用cv::glob函数来获取指定目录下的所有图像文件。在加载数据集时,一般需要将数据集随机划分为训练集、测试集和验证集三部分。可以通过使用C++ STL中的随机数生成函数std::shuffle来随机打乱数据集,并按照比例划分为三部分。具体实现可以参考以下代码:
```
#include <opencv2/opencv.hpp>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace cv;
using namespace std;
int main()
{
// 定义存储图像路径的向量
vector<String> img_paths;
// 获取指定目录下的所有jpg格式文件
glob("path/to/images/*.jpg", img_paths, false);
// 打乱图像路径的顺序
random_shuffle(img_paths.begin(), img_paths.end());
// 划分训练集、测试集和验证集
int n = img_paths.size();
int train_num = n * 0.6; // 训练集占60%
int test_num = n * 0.2; // 测试集占20%
int val_num = n - train_num - test_num; // 验证集占剩下的20%
vector<String> train_paths(img_paths.begin(), img_paths.begin() + train_num);
vector<String> test_paths(img_paths.begin() + train_num, img_paths.begin() + train_num + test_num);
vector<String> val_paths(img_paths.begin() + train_num + test_num, img_paths.end());
// 输出各部分数据集的大小
cout << "Train set size: " << train_num << endl;
cout << "Test set size: " << test_num << endl;
cout << "Validation set size: " << val_num << endl;
return 0;
}
```
阅读全文