【问题标题】:How to read first 5000 images from a folder如何从文件夹中读取前 5000 张图像
【发布时间】:2018-02-08 23:04:51
【问题描述】:
path = dir(fullfile('G:\256_ObjectCategories\*\*.jpg'));

这里的Path将包含所有图片的路径。 第一个 * 是读取所有 256 个文件夹。每个 256 个文件夹包含 7k-8k 图像。 通过编写*.jpg,它将读取所有图像,但我想读取前 5k 图像。我应该如何在 Matlab 中做到这一点?

第二个类似的问题是

data = imageDatastore(fullfile('G:\256_ObjectCategories')

现在它将创建一个图像数据存储,但我想再次从超级文件夹 256_ObjectCategories 中的每个 256 个子文件夹中读取前 5k 个图像。

如何在 Matlab 中做到这一点?

【问题讨论】:

  • 你如何定义“第一”?

标签: matlab


【解决方案1】:

有很多来自 Matlab 的支持论坛来完成这项工作。这是来自 Matlab 论坛之一的示例代码。我认为这可以解决您的问题

numFiles = length(myfile);
numRows = ceil(sqrt(numFiles));
for k = 1 : numFiles
    thisFileName = fullfile(myfile(k).folder, myfile(k).name);
    thisImage = imread(thisFileName);
    subplot(numRows, numRows, k);
    imshow(thisImage);
end

【讨论】:

    【解决方案2】:

    我认为您可以使用 imageDataStore 标签和 splitEachLabel 方法 (see documentation) 做您想做的事。

    [imds1,imds2] = splitEachLabel(imds,p) 分割imds中的图片文件 到两个新的数据存储区,imds1 和 imds2。新的数据存储 imds1 包含每个标签的前 p 个文件,而 imds2 包含 每个标签的剩余文件。 p 可以是介于 0 之间的数字 和 1 表示每个标签中要分配的文件的百分比 到 imds1,或一个整数,表示来自的文件的绝对数量 要分配给 imds1 的每个标签。

    首先创建数据存储,自动用文件夹名称标记每个图像:

    imds = imageDatastore('G:\256_ObjectCategories\*\*.jpg','LabelSource','foldernames');
    

    然后您可以根据这些标签拆分数据存储区,如下所示:

    [imds_5k, imds_extra] = splitEachLabel(imds,5000);
    

    现在imds_5k 将包含来自每个文件夹(标签)的前 5000 张图像,imds_extra 将包含其他 2-3k 图像..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 2023-03-03
      相关资源
      最近更新 更多