getting absurd result in For loop

6 vues (au cours des 30 derniers jours)
NAVNEET NAYAN
NAVNEET NAYAN le 31 Mar 2017
Commenté : NAVNEET NAYAN le 31 Mar 2017
multi = dir('D:\testing\abrupt\*.jpg');
for i = 1:2:length(multi)
filename = strcat('D:\testing\abrupt\',num2str(i),'.jpg');
I = imread(filename);
I1 = rgb2gray(I);
mat1(:,:,i)= I1;
end
In the folder "multi" images are saved as 1.jpg 3.jpg 5.jpg...etc.the total number of images in "multi"was 133 and it is like 1,3,5,7....265, means only odd number of images are saved. when this code was run, the I am getting m-by-n-by-133 mat1(:,:,i) values but problem encountered is that mat1(:,:,2), mat1(:,:,4), mat1(:,:,6) or mat1(:,:,even no.) are having all matrix elements as zero whereas mat1(:,:,odd number) are giving correct result? How can I solve this problem??

Réponse acceptée

Jan
Jan le 31 Mar 2017
Modifié(e) : Jan le 31 Mar 2017
The results is not absurd, but exactly as expected. Try this:
a = [];
a(1) = 1;
a(3) = 3;
disp(a)
The element a(2) is filled by a 0 implicitly. There are no "gaps" in numerical arrays. Solution:
FileList = dir('D:\testing\abrupt\*.jpg');
for iFile = 1:length(FileList)
filename = fullfile('D:\testing\abrupt\', FileList(iFile));
I = imread(filename);
I1 = rgb2gray(I);
mat1(:, :, iFile)= I1;
end
If you want to exclude the files with the even indices:
FileList = dir('D:\testing\abrupt\*.jpg');
index = 0;
for iFile = 1:2:length(FileList)
filename = fullfile('D:\testing\abrupt\', sprintf('%d.jpg', iFile));
I = imread(filename);
I1 = rgb2gray(I);
index = index + 1;
mat1(:,:, index) = I1;
end
  1 commentaire
NAVNEET NAYAN
NAVNEET NAYAN le 31 Mar 2017
Thanks Simon, It's working now...

Connectez-vous pour commenter.

Plus de réponses (1)

KSSV
KSSV le 31 Mar 2017
Modifié(e) : KSSV le 31 Mar 2017
In the for loop you are taking only even numbers....change it to 1:1:length(multi)
multi = dir('D:\testing\abrupt\*.jpg');
for i = 1:1:length(multi)
filename = strcat('D:\testing\abrupt\',num2str(i),'.jpg');
I = imread(filename);
I1 = rgb2gray(I);
mat1(:,:,i)= I1;
end
  1 commentaire
NAVNEET NAYAN
NAVNEET NAYAN le 31 Mar 2017
when i am doing for i = 1:1:length(multi) i am getting an error : File "D:\testing\abrupt\2.jpg" does not exist. Error in program_number_2(line 7) I2 = imread(filename);

Connectez-vous pour commenter.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by