2013-03-27 220 views
5

我在某个目录中有特定图像,我想加载所有这些图像以进行一些处理。我试过使用load函数。加载目录中的所有图像

imagefiles = dir('F:\SIFT_Yantao\demo-data\*.jpg');  
nfiles = length(imagefiles); % Number of files found 
for i=1:nfiles 
currentfilename=imagefiles(i).name; 
I2 = imread(currentfilename); 
[pathstr, name, ext] = fileparts(currentfilename); 
textfilename = [name '.mat']; 
fulltxtfilename = [pathstr textfilename]; 
load(fulltxtfilename); 
descr2 = des2; 
frames2 = loc2; 
do_match(I1, descr1, frames1, I2, descr2, frames2) ; 
end 

xyz.jpg没有这样的文件或目录中找到,其中xyz是我的第一个图像在该目录中,我得到一个错误,因为无法读取。
我也想从目录加载所有格式的图像,而不是只有JPG格式......我该怎么做?

回答

9

如下,您可以轻松地将同类型多张图片:

function Seq = loadImages(imgPath, imgType) 
    %imgPath = 'path/to/images/folder/'; 
    %imgType = '*.png'; % change based on image type 
    images = dir([imgPath imgType]); 
    N = length(images); 

    % check images 
    if(~exist(imgPath, 'dir') || N<1) 
     display('Directory not found or no matching images found.'); 
    end 

    % preallocate cell 
    Seq{N,1} = [] 

    for idx = 1:N 
     Seq{d} = imread([imgPath images(idx).name]); 
    end 
end 
+0

我不得不改变路径到'path/to/images/folder /'来使它工作。仍然很好的解决方案。 – Dcortez 2014-12-09 12:23:10

+0

我强烈建议使用'fullfile'从文件夹和文件名创建图像路径,以便适当考虑尾部斜线和文件系统差异。 – Suever 2016-01-14 13:31:33

1

完整路径(包括目录)不保存在imgfiles.name中,只是文件名,所以无法找到该文件,因为您没有告诉它该在哪里查找。如果您不想更改目录,请在读取文件时再次使用fullfile。

您也正在使用错误的功能读取图像 - 尝试imread。 其他注意事项:it's best not to use i for variables,你的循环在每一步都会覆盖I2,所以你最终只会得到一个图像,而不是四个。

+0

我怎么能再给fullfile当我读图像..你可以写代码? – aushima 2013-03-27 10:33:13

+0

您是否真的** **在[fullfile]的[documentation](http://www.mathworks.co.uk/help/matlab/ref/fullfile.html)? – wakjah 2013-03-27 10:37:25

1

可以使用imageSet对象在计算机视觉系统工具箱。它从一个给定的目录加载图像文件名,并使您能够顺序读取图像。它也给你选择递归到子目录。