Matlab 如何使用imread和imwrite进行路径检索?

Matlab 如何使用imread和imwrite进行路径检索?,matlab,image,Matlab,Image,我知道imread和imwrite是如何工作的,但我不知道该函数从何处调用图像文件?换句话说,为了使用imread调用图像,我将图像存储在何处?cd显示当前工作目录。把你的文件放在那里 或者,将目录更改为您首先需要的目录: 默认情况下imread()在当前工作目录中查找图像。一个非常明智的做法是为每个图像提供imread绝对路径 假设您在windows上,您可以执行以下操作: imdir='C:\myproject\images\'; imfile1='image1.jpg'; imfile2

我知道
imread
imwrite
是如何工作的,但我不知道该函数从何处调用图像文件?换句话说,为了使用
imread
调用图像,我将图像存储在何处?

cd
显示当前工作目录。把你的文件放在那里

或者,将目录更改为您首先需要的目录:

默认情况下
imread()
在当前工作目录中查找图像。一个非常明智的做法是为每个图像提供
imread
绝对路径

假设您在windows上,您可以执行以下操作:


imdir='C:\myproject\images\';
imfile1='image1.jpg';
imfile2='image2.jpg'

im1=imread([imdir,imfile1]); im2=imread([imdir,imfile2]);

这样,如果您决定将图像移动到另一个目录,您只需要更改代码的一行。

建议您可以将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
向用户询问包含图像集的目录。

其他回答讨论了matlab将在当前目录中查找任何要加载的文件的想法

如果不确定当前目录是什么,请在命令提示下键入

pwd
这将返回当前目录。命令cd在没有参数的情况下使用时,也将显示当前目录名。cd还可以帮助您在适当的时候移动到其他目录。当然,如果您不确定目录中这些文件的名称,dir将在这方面帮助您

如果您喜欢使用目录堆栈,pushd和popd是很好的下载函数


如果matlab没有找到有问题的文件,并且您没有指定绝对路径(可能是由uigetfile生成的),那么它将查看搜索路径上的其他目录。所以另一个想法是,如果您经常想从特定目录加载文件,您可以将该目录添加到您的搜索路径中。addpath、rmpath、savepath和pathtool在这里都是有用的工具。

您可以将绝对和相对文件路径传递给IMREAD和IMWRITE。例如,绝对路径为:

filePath = 'C:\mywork\matlab\images\picture1.jpg';
filePath = 'images\picture1.jpg';
filePath = 'toolbox\matlab\iofun';
filePath = 'toolbox/matlab/iofun';
如果已将MATLAB中的当前工作目录更改为“C:\mywork\MATLAB”,则相对路径(相对于当前目录)将为:

filePath = 'C:\mywork\matlab\images\picture1.jpg';
filePath = 'images\picture1.jpg';
filePath = 'toolbox\matlab\iofun';
filePath = 'toolbox/matlab/iofun';

还有一件事要考虑的是你的路径字符串在不同的平台上工作得多好。例如,Windows相对路径为:

filePath = 'C:\mywork\matlab\images\picture1.jpg';
filePath = 'images\picture1.jpg';
filePath = 'toolbox\matlab\iofun';
filePath = 'toolbox/matlab/iofun';
但UNIX相对路径是:

filePath = 'C:\mywork\matlab\images\picture1.jpg';
filePath = 'images\picture1.jpg';
filePath = 'toolbox\matlab\iofun';
filePath = 'toolbox/matlab/iofun';

请注意,一个使用反斜杠,另一个使用正斜杠。为了确保您的代码能够跨多个平台工作,我将检查这些用于处理文件路径的MATLAB函数(仅举几个例子):,。

谢谢adam,但它是永久性地更改目录,还是仅在工作需要时才更改目录?它会更改更改后运行的所有脚本和命令的目录。哦,但是我不打算那样做。。我认为有一个默认文件夹可以放置图像,在那里我可以做同样的事情,并使用imread调用,这对我将来也会更容易。@kigurai:那么你也应该看看uigetdir。