做计算机视觉,或多或少需要用到图片批量读取的功能,我在这里分享两种比较经常用到的方法。还有后面会总结路径拼接的方法。
- dir方法读取
这个方法比较不好的地方就是,他会读取到.,…这两个代表根目录的符号,导致目录里的图片数量比正确的数量多两个。
所以一般在matlab里,我们需要从第三个开始遍历
test_output_folder = 'test_cell_detection_0613_output_cell2_yolov2_crop_900_900_delete';
test_files = dir(test_image_folder);
for k = 3 : length(test_files)
#图片文件名
baseFileName = test_files(k).name;
#连接上文件夹变成路径
fullFileName = fullfile(test_image_folder, baseFileName);
I = imread(fullFileName);
#你的处理代码
end
- 用imageDatastore方法
如果一个图像文件集合中的每个图像可以单独放入内存,但整个集合不一定能放入内存,则可以使用 ImageDatastore 对象来管理。您可以使用 imageDatastore 函数创建 ImageDatastore 对象,指定其属性,然后使用对象函数导入和处理数据。
testImage = fullfile(input_image_folder_name,'*.png');
number_of_input_images=length(dir(testImage))
%create test image datastore:
imds = imageDatastore(testImage);
for k=1:length(imds_i.Files)
I = readimage(imds_i,k);
#你的处理代码
end
imageDatastore的4个属性 imds =
ImageDatastore with properties:
Files: {
’ …\matlab\toolbox\matlab\demos\street1.jpg’;
’ …\matlab\toolbox\matlab\demos\street2.jpg’;
’ …\matlab\toolbox\matlab\imagesci\peppers.png’
… and 1 more
}
ReadSize: 1
Labels: {}
ReadFcn: @readDatastoreImage
路径方法总结
1.该函数用于将一个文件的完整路径中各部分提取出来。
[folder,output_base_name,] = fileparts(fullFileName);
[path,name,ext] = fileparts(file);
2.该函数是将文件路径拼合起来
2.1 通过fullfile函数
fullFileName = fullfile(test_image_folder, baseFileName);
2.2 通过字符串连接的方式
imwrite(I,[test_output_folder,'/',output_base_name,'_output','.png']);
2.3 用sprintf的方式
str = sprintf(formatSpec,A1,…,An)使用formatSpec数组A1,…,An中的数据格式。在str中返回生成的文本。sprintf函数按A1,…,An按列顺序设置值的格式。
groundtruthFileName1 = sprintf('%s/%s.png',metalfile,name);
mkdir(groundtruthFileName1);
imwrite(b,groundtruthFileName1);