I am trying to load multiple tiff files like this:
for i=66:96
LSTday=strcat('Research\MODIS\MOD11A1\MOD11A1.006_LST_Day_1km_doy20101',string(i));
end
but, I keep getting imread error: Error using imread>parse_inputs (line 450)
The file name or URL argument must be a character vector.
Can anyone kindly help me what is the issue?

2 commentaires

Which MATLAB release are you using? There were a small number of releases after string() was introduced but before imread() recognized it.
I am using 2018a version

Connectez-vous pour commenter.

 Réponse acceptée

See code samples in the FAQ:
Here is code I adapted from it for you:
folder = 'Research\MODIS\MOD11A1\MOD11A1.006_LST_Day_1km_doy20101';
if ~isfolder(folder)
errorMessage = sprintf('Folder %s does not exist.\n', folder);
uiwait(errordlg(errorMessage));
return;
end
% Use fullfile() if you need to prepend some other folder to the base file name.
% Adapt to use which ever cases you need.
for k = 66 : 96
% Create an image filename, and read it in to a variable called imageData.
fullFileName = fullfile(folder, sprintf('%d.tiff', k));
if isfile(fullFileName)
imageData = imread(fullFileName);
imshow(imageData, []);
drawnow;
else
fprintf('File %s does not exist.\n', fullFileName);
end
end

5 commentaires

Thank you. But I got errors as I have a string(i) with each image and that is not read in the loop.
Stephen23
Stephen23 le 14 Mar 2022
Modifié(e) : Stephen23 le 15 Mar 2022
"But I got errors as I have a string(i)..."
Your code has errors. Image Analyst's code does not call STRING anywhere.
So far Walter Roberson explained that you cannot use a string with IMREAD. Yet you persist in trying to use a string input to IMREAD. What do you expect to change if you keep doing the same thing?
I understood that but it is not looping through the image as the last part is changing from 66:96 as in this part LSTday=strcat('Research\MODIS\MOD11A1\MOD11A1.006_LST_Day_1km_doy20101',string(i));
What can I put there instead of a string? the code image analyst shared gives this error:
Researcj\MODIS\MOD11A1\MOD11A1.006_LST_Day_1km_doy20101\96.tiff does not exist. (whereas the data isn't set like this.
Stephen23
Stephen23 le 14 Mar 2022
Modifié(e) : Stephen23 le 15 Mar 2022
"What can I put there instead of a string?"
Did you try the suggestions that you have been given so far on this thread?
  • CHAR of a string scalar
  • SPRINTF of a numeric
Or use DIR, which probably suits your use-case better anyway. See:
Actually you should probably use the other method in the FAQ where you just get a list of everything that's definitely there, rather than build up a filename and hope that it's there. But anyway, either way will work, IF you'll just follow the FAQ instead of continuing to try to use your way.

Connectez-vous pour commenter.

Plus de réponses (2)

Walter Roberson
Walter Roberson le 13 Mar 2022

0 votes

In R2018a, imread() requires a character vector, not a string() object.
The first release that supported string objects for file names was R2018b, the release after you have.

3 commentaires

Is there any other function I can use to read the string file in a loop then? I have way too many data to load.
Stephen23
Stephen23 le 13 Mar 2022
Modifié(e) : Stephen23 le 13 Mar 2022
"Is there any other function I can use to read the string file in a loop then?"
Use a character vector rather than a string, just as Walter Roberson wrote.
"I have way too many data to load."
The MATLAB documentation show how to load multiple files. Note that it recommends SPRINTF:
char() of a string scalar gives you a character vector

Connectez-vous pour commenter.

Voss
Voss le 14 Mar 2022
In place of the code you posted, do this:
file_name_prefix = 'Research\MODIS\MOD11A1\MOD11A1.006_LST_Day_1km_doy20101';
for i = 66:96
LSTday = sprintf('%s%d',file_name_prefix,i);
end
And use LSTday the same as you are already doing in the rest of the code, e.g., using it in imread().

2 commentaires

Except that I think you really meant to use fullfile() which is more robust since it doesn't care if the folder ends with a slash or not - it will always get it right.
Voss
Voss le 15 Mar 2022
Well, I didn't want to assume that 'MOD11A1.006_LST_Day_1km_doy20101' is a directory when it might be part of the file names, e.g., file names might be:
  • MOD11A1.006_LST_Day_1km_doy2010166
  • MOD11A1.006_LST_Day_1km_doy2010167
  • etc.
OP has reported: "Researcj\MODIS\MOD11A1\MOD11A1.006_LST_Day_1km_doy20101\96.tiff does not exist." but that could be for any one of a number of reasons.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Convert Image Type dans Centre d'aide et File Exchange

Produits

Version

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by