如何从OpenCV的目录中按顺序读取文件?

Posted

技术标签:

【中文标题】如何从OpenCV的目录中按顺序读取文件?【英文标题】:How to read files in sequence from a directory in OpenCV? 【发布时间】:2014-10-23 19:16:01 【问题描述】:

我是OpenCV 的新手。我想读取目录中的 XML 文件。我正在使用 FindFirstFile,但我不知道如何获取文件名以进一步作为 cvLoad 的输入。这是我正在使用的代码:

HANDLE hFind;
WIN32_FIND_DATA FindFileData;
wchar_t* file = L"D:\\zainb_s\\M.phil\\thesis\\dataset\\dataset_3\\RGB_3\\RGB\\s01_e01-   Copy\\1_walking\\depth\\*.xml";
hFind = FindFirstFile(file, &FindFileData);
cout << FindFileData.cFileName[0];
FindClose(hFind);

我想将文件名放在一个数组中以进一步读取文件以进行处理。

【问题讨论】:

那么您的问题是关于检测文件夹中的文件?可以使用 Qt 或 boost 之类的附加库吗? 是的。我想访问文件夹中的文件,想一一访问它们的名称以加载以进行进一步处理。我将如何使用这些库?我帮助我对 Opencv 和 C 很陌生 【参考方案1】:

如果您使用的是最新版本的 OpenCV,最好避免使用特定于操作系统的方法:

vector<string> fn; // std::string in opencv2.4, but cv::String in 3.0
string path = "e:/code/vlc/faces2/*.png";
cv::glob(path,fn,false);
// Now you got a list of filenames in fn.

(哦,再一次,避免不推荐使用的 C-API 函数,如 cvLoad 就像地狱,拜托!!)

【讨论】:

哇。它工作得很好。非常感谢,你这么快就解决了我的问题。 太好了,还不知道 glob! @berak cvLoad 是我为我的数据集获得的解决方案,经过多次尝试后它工作正常。我需要将它用于我的数据集。你能帮我做一件事吗?这段代码运行良好,但您必须知道 cvLoad 需要一个 const char * 但这段代码给出的是字符串。你能帮我解决这个问题吗?非常感谢你。我非常希望我的问题能在这里得到解决。 每个字符串都有一个 c_str();返回 const char* 的成员。 嘿@berak 它对我有用。谢谢你。你能指导我做一件事吗?当我使用 IplImage* depth=(IplImage*)cvLoad("depthImg190.xml");它工作正常。但是当我使用 IplImage* depth=(IplImage*)cvLoad(filename);其中文件名 = "D:\\zainb_s\\M.phil\\thesis\\dataset\\dataset_3\\RGB_3\\RGB\\s01_e01-Copy\\1_walking\\depth\\depthImg190.xml" cvLoad 没有给出我很好的结果。它不能很好地读取参数。你能在这里指导我以及这种行为的原因吗?

以上是关于如何从OpenCV的目录中按顺序读取文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库中读取值,例如 jmeter 中的 csv 文件

c语言中从文件中按行读取字符串,并进行相应操作。

如何从 OpenCV 中的 YUV 文件中读取帧?

python之从文件中按行读取数据

java 从文件中按行读取文本

opencv如何批量读取文件夹中图片