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中完成?
答案 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图片..