在 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%),而不重复(我的意思是用于火车的图像,不能用于测试)?请 只使用索引N
到filenames.size()
中的图像。并尝试研究一下 C++ 的工作原理
非常感谢,我做到了。
三木,你能在下面的链接中回答我的问题吗***.com/questions/36655182/roc-curve-in-opencv3-0-0
你能帮我吗,我想回答我的问题***.com/questions/36876093/…以上是关于在 OpenCv 3.0.0 中使用百分比随机读取一些图像 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
使用 OpenCV 3.0.0-rc1 的 VideoCapture 选择超时
如何使用 c++ 在带有 opencv 3.0.0 的视频中画一条线
使用 OpenCV 3.0.0 的 Qt 5.6 未找到 DLL 入口点