在 OpenCv 3.0.0 中使用百分比随机读取一些图像

read some images randomly using a percentage in OpenCv 3.0.0

我想开发一个 SVM 分类器,因为我有图像,我会使用 OpenCv 3.0.0 和 C++ 读取 80% 的数据用于训练,20% 的数据用于随机测试。 你能帮我吗。 我的图片在同一个文件夹中。

您可以:

  • 用OpenCV glob函数读取指定文件夹下的所有文件。您会将所有文件名保存到 std::vector<std::string>

  • std::random_shuffle 文件名向量

  • 只保留打乱后向量的前 XX% 个名称

  • 用你的图片做点什么

代码:

#include <opencv2/opencv.hpp>
#include <vector>
#include <string>
#include <algorithm>

int main()
{
    // Read all .png files from the specified folder
    std::string folder = "D:/SO/img/*.png";
    std::vector<std::string> filenames;
    cv::glob(folder, filenames);

    // Random shuffle
    std::random_shuffle(filenames.begin(), filenames.end());

    // Keep 80%
    float how_many = 0.80;
    size_t N = filenames.size() * how_many;

    // Do something with N random images
    for (size_t i = 0; i < N; ++i)
    {
        // Load and show image
        cv::Mat3b img = cv::imread(filenames[i]);
        cv::imshow("Img", img);
        cv::waitKey(1);
    }

    return 0;
}