matlab按路徑對圖片進行批量讀取的方法整理物體目標檢測

做計算機視覺,或多或少需要用到圖片批量讀取的功能,我在這裏分享兩種比較經常用到的方法。還有後面會總結路徑拼接的方法。

  1. 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

  1. 用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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章