我知道imread
和imwrite
是如何工作的,但我不知道函数从哪里调用图像文件?换句话说,我在哪里存储图像以便使用imread
调用它?
答案 0 :(得分:5)
由于Adam建议你可以将Matlab工作目录更改为图像的位置,或者我倾向于让用户选择要使用uigetfile
>> [fn,pn]=uigetfile({'*.TIFF,*.jpg,*.bmp','Image files'}, 'Select an image');
>> I = imread(fullfile(pn,fn));
或者如果您知道要阅读的图像的目录,则可以将其存储在变量中,然后使用dir
>> imageDir = 'c:\path\to\my\images';
>> imageList = dir(fullfile(imageDir,'*.tif')); % store all files with extension tif
% in a structure array imageList
从那里你可以遍历imageList
并处理找到的每个图像。最后,
您可以使用uigetdir
向用户询问包含图像集的目录。
答案 1 :(得分:2)
您可以将绝对和相对文件路径传递给IMREAD和IMWRITE。例如,绝对路径为:
filePath = 'C:\mywork\matlab\images\picture1.jpg';
如果您已将MATLAB中的当前工作目录更改为“C:\ mywork \ matlab”,则相对路径(相对于当前目录的)将为:
filePath = 'images\picture1.jpg';
此外,还需要考虑的另一件事是您的路径字符串在不同平台上的工作情况。例如,Windows相对路径为:
filePath = 'toolbox\matlab\iofun';
但UNIX的相对路径是:
filePath = 'toolbox/matlab/iofun';
注意一个使用反斜杠,一个使用正斜杠。为了确保您的代码可以跨多个平台工作,我会查看这些MATLAB函数来处理文件路径(仅举几例):FULLFILE,FILEPARTS,FILESEP。< / p>
答案 2 :(得分:1)
默认情况下imread()
查找当前工作目录中的图像。一个非常明智的做法是给imread
每个图像的绝对路径。
假设你在Windows上,你可以这样做:
imdir = 'C:\myproject\images\';
imfile1 = 'image1.jpg';
imfile2 = 'image2.jpg';
im1 = imread([imdir, imfile1]);
im2 = imread([imdir, imfile2]);
这样,如果您决定将图像移动到另一个目录,则只需更改代码的一行。
答案 3 :(得分:1)
其他回复讨论了matlab将在当前目录中查找要加载的任何文件的想法。
如果您不确定当前目录是什么,请在命令提示符下键入
pwd
这将返回当前目录。命令cd在没有参数的情况下也会显示当前目录名。 cd也可以帮助您在适当的时候移动到不同的目录。当然,如果您不确定目录中这些文件的名称,dir会帮助您。
如果您更喜欢使用目录堆栈,pushd和popd是很好的下载功能。
http://www.mathworks.com/matlabcentral/fileexchange/8103
如果matlab找不到有问题的文件,并且你没有指定绝对路径,也许是由uigetfile生成的,那么它将查看搜索路径上的其他目录。另外一个想法是,如果您经常要从特定目录加载文件,只需将该目录添加到搜索路径即可。 addpath,rmpath,savepath和pathtool都是有用的工具。
答案 4 :(得分:0)