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

Posted

技术标签:

【中文标题】在 OpenCv 3.0.0 中使用百分比随机读取一些图像 [关闭]【英文标题】:read some images randomly using a percentage in OpenCv 3.0.0 [closed] 【发布时间】:2016-04-13 18:31:37 【问题描述】:

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

【问题讨论】:

使用“glob”获取所有图片路径的字符串向量。随机打乱向量,并加载所需数量的图像 请注意,我读取了我的图像的所有名称,并将其放入文件中,然后加载它,现在我只加载其中的 80% 进行训练,但不仅仅是拳头那些。 我还有一个问题,我怎样才能指定 80% 的列表大小,以及我必须包含的任何库(对于随机播放和百分比)? 请注意,这是一个问答网站,而不是代码编写服务。如果您edit您的问题描述了您到目前为止所尝试的内容以及您遇到的问题,那么我们可以尝试帮助解决具体问题。您还应该阅读How to Ask。 是的,我试过了,但我做不到 【参考方案1】:

你可以:

使用 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;

【讨论】:

很好,非常感谢,很高兴得到您的帮助。现在你能告诉我,我怎样才能阅读测试部分的其余图像(20%),而不重复(我的意思是用于火车的图像,不能用于测试)?请 只使用索引Nfilenames.size() 中的图像。并尝试研究一下 C++ 的工作原理 非常感谢,我做到了。 三木,你能在下面的链接中回答我的问题吗***.com/questions/36655182/roc-curve-in-opencv3-0-0 你能帮我吗,我想回答我的问题***.com/questions/36876093/…

以上是关于在 OpenCv 3.0.0 中使用百分比随机读取一些图像 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenCV 3.0.0-rc1 的 VideoCapture 选择超时

OpenCV随机图像加载错误

如何使用 c++ 在带有 opencv 3.0.0 的视频中画一条线

使用 OpenCV 3.0.0 的 Qt 5.6 未找到 DLL 入口点

在 Windows 上使用 Eclipse 安装 OpenCV 3.0.0

FeatureDetectors 不在 OpenCV 3.0.0 中?