使用 OpenCV(C++)读取文件夹中的任何 .jpg 图像 [关闭]

Posted

技术标签:

【中文标题】使用 OpenCV(C++)读取文件夹中的任何 .jpg 图像 [关闭]【英文标题】:Read any .jpg Image in a folder with OpenCV (C++) [closed] 【发布时间】:2017-02-01 08:25:19 【问题描述】:

我有一个包含一些图像的文件夹。我没有图像文件的名称。我正在使用带有 C++ 的 openCV。我想读取文件夹中的任何 .jpeg 图像,并在读取图像时将此图像的文件名作为字符串。是否可以?我可以为此使用imread 方法吗?

感谢您的帮助

【问题讨论】:

是的,是的。我也不想这么说,但如果你用谷歌搜索“imread opencv”,第一个链接是关于如何打开图像的示例,第二个链接是“imread”文档。 Can not read image in opencv的可能重复 文件夹中有图片吗?你知道,它们是不同的东西 @CodeJam, i want to get the name as a string when i read 当你读到什么?一旦你有了图像文件的文件名(你可以用任何你喜欢的方式得到它,它与 opencv 无关),你只需将该文件名传递给imread。是否要打开 文件夹 中的所有图像?如果是这样,您应该在问题中说明这一点,因为现在无法猜测。 @CodeJam,您的问题中没有“文件夹”一词,您希望我们如何解读您的想法? 【参考方案1】:

如果您有权使用 boost:

boost::filesystem::directory_iterator itr(boost::filesystem::path("your_folder_path"));

for(itr; itr != boost::filesystem::directory_iterator(); ++itr)

    if(itr->path().extension().string() == ".jpg")
    
        std::string imageFilename = itr->path().filename().string();
        imread(imageFilename);
    

如果没有/不想使用boost,可以使用cv::glob获取目录下的文件列表:

vector<String> filenames;

// Get all jpg in the folder
cv::glob("your/folder/name/*.jpg", filenames);

for (size_t i=0; i<filenames.size(); i++)

    Mat im = imread(filenames[i]);

【讨论】:

没有必要使用boost。你可以使用cv::glob @Miki,我知道,但问题已被删除一段时间,我没有机会编辑我的答案 当然,我只是指出这一点,以防万一。我会以重复的形式关闭,但在“文件夹”一词出现之前我已经投票了 小编辑,你怎么不介意 ;) @Miki,很好,谢谢,我不知道它支持通配符

以上是关于使用 OpenCV(C++)读取文件夹中的任何 .jpg 图像 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从 OpenCV(C++)中的目录读取多个图像

C++ + OpenCV = 访问冲突读取位置 0x02176000

在matlab中调用时无法在C++中使用opencv读取图像

使用 OpenCV 将视频帧读取到指定的指针(C++)

详解C++标准库<sstream>中的类stringstream,并利用它实现OpenCV下的图片批量读取

OpenCV入门C++版