6

我在目录中有某些图像,我想加载所有这些图像以进行一些处理。我尝试使用该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……我该怎么做?

4

4 回答 4

10

您可以轻松加载多个相同类型的图像,如下所示:

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
于 2013-03-27T11:18:58.033 回答
2

我相信你想要这个imread功能,而不是load. 请参阅文档

于 2013-03-27T10:26:39.900 回答
1

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

您还使用了错误的功能来读取图像 - 尝试 imread。其他注意事项:最好不要将 i 用于 variables,并且您的循环在每一步都会覆盖 I2 ,因此您最终只会得到一张图像,而不是四张。

于 2013-03-27T10:27:20.487 回答
1

您可以使用计算机视觉系统工具箱中的imageSet对象。它从给定目录加载图像文件名,并使您能够按顺序读取图像。它还为您提供了递归到子目录的选项。

于 2016-01-14T14:51:57.487 回答