如何从文件夹中读取前5000个图像

时间:2018-02-08 09:51:40

标签: matlab

path = dir(fullfile('G:\256_ObjectCategories\*\*.jpg'));

此处路径将包含所有图片的路径。 首先*是读取所有256个文件夹。每256个文件夹包含7k-8k图像。 通过写 *。jpg ,它将读取所有图像,但我想读取前5k图像。我该怎么做 Matlab

第二个类似的问题是

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

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

我怎样才能在Matlab中完成?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为您可以使用imageDataStore标记和splitEachLabel方法(see documentation)执行您想要的操作。

  

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

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

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

然后,您可以根据以下标签拆分数据存储区:

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

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