Как поиск пути работает с использованием imread и imwrite? - PullRequest
6 голосов
/ 17 апреля 2009

Я знаю, как работают imread и imwrite, но я не знаю, откуда функция вызывает файл изображения? Другими словами, где я могу сохранить изображение, чтобы вызвать его, используя imread?

Ответы [ 5 ]

5 голосов
/ 17 апреля 2009

Как Адам предполагает, что вы можете изменить рабочий каталог 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, чтобы запросить у пользователя директорию, содержащую набор изображений.

2 голосов
/ 18 апреля 2009

Вы можете передавать как абсолютные, так и относительные пути к файлам 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 .

1 голос
/ 17 апреля 2009

В других ответах обсуждалась идея, что matlab будет искать в текущем каталоге все загружаемые файлы.

Если вы не уверены, что текущий каталог является, в командной строке введите

pwd

Это вернет текущий каталог. Команда cd, если она используется без аргументов, также будет отображать текущее имя каталога. CD также может помочь вам перейти в другой каталог, когда это уместно. И, конечно, если вы не уверены в именах этих файлов в каталоге, вам поможет dir.

Если вы предпочитаете использовать стек каталогов, pushd и popd являются хорошими функциями для загрузки.

http://www.mathworks.com/matlabcentral/fileexchange/8103

Если matlab не находит файл, о котором идет речь, и вы не указали абсолютный путь, возможно, сгенерированный uigetfile, он будет искать другие каталоги в вашем пути поиска. Итак, другая идея заключается в том, что если вы часто хотите загружать файлы из определенного каталога, вы можете просто добавить этот каталог в путь поиска. addpath, rmpath, savepath и pathtool будут полезными инструментами здесь.

1 голос
/ 17 апреля 2009

По умолчанию imread() ищет изображения в текущем рабочем каталоге. Очень разумная вещь - дать imread абсолютный путь к каждому изображению.

Предполагая, что вы находитесь в Windows, вы можете сделать что-то вроде этого:

<code>
imdir = 'C:\myproject\images\';
imfile1 = 'image1.jpg';
imfile2 = 'image2.jpg';</p>

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

Таким образом, если вы решите переместить ваши изображения в другой каталог, вам потребуется изменить только одну строку кода.

0 голосов
/ 17 апреля 2009

cd отображает текущий рабочий каталог. Поместите туда свои файлы.

Альтернативно, сначала измените каталог на тот, который вам нужен:

www.mathworks.com / доступ / Служба поддержки / помощи / Techdoc / исх / cd.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...