iam unable to call function in for loop?

this is the error iam getting
The file name or URL argument must be a character vector or string scalar.
Error in imread (line 342)
[source, fmt_s, extraArgs, was_cached_fmt_used] = parse_inputs(cached_fmt, varargin{:});
im = double(imread(image))
clc;
clear all;
D = 'C:\Users\PRL\Desktop\barathfocus\for-matlab-testonly';
S = dir(fullfile(D,'*.tif')); % pattern to match filenames.
for k = 1:numel(S)
F = fullfile(D,S(k).name);
I = double(imread(F));
a = bodekke(I);
end
function[addition] = bodekke(image)
im = double(imread(image))
bd = [-1 0 1]
cbd = conv2(im,bd)
squaredcbd = cbd.^2
addition = sum(squaredcbd(:))
imshow(cbd)
end

2 Comments

barath V
barath V on 6 Feb 2020
Edited: barath V on 6 Feb 2020
yes,is working thanks bhaskar.
but i dont understand why it works.
i have passed the image to variable I.
and i call the function with image I it should work.
why it is working if i call by using its name

Sign in to comment.

 Accepted Answer

The argument for imread must be file location. "image" in the function is an array.
HTH

5 Comments

can u pls tell me which line should i cahnge?
Sorry for my rough reply. The first line in the function is problematic. As commented,
a = bodekke(F)
will work.
barath V
barath V on 6 Feb 2020
Edited: barath V on 6 Feb 2020
yes,is working thanks.
but i dont understand why it works.
i have passed the image to variable I.
and i call the function with image I it should work.
why it is working if i call by using its name.
Stephen23
Stephen23 on 6 Feb 2020
Edited: Stephen23 on 6 Feb 2020
"and i call the function with image I it should work."
Not according to the imread documentation, which states that imread requires a filename as its first input argument. In your function bodekke you call imread, but in your original code what is its input argument? (hint: an image array, and not a filename as it requires).
"why it is working if i call by using address"
Because imread requires a filename as its first input argument.
It appears that you are getting confused by the fact that you have called imread twice, once outside the function (correctly with a filename) and once inside the function (incorrectly with a numeric array). You can either call imread outside the function (and pass an image array) or inside the function (and pass the filename), but doing both makes no sense.
thanks i understood.

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2018b

Community Treasure Hunt

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

Start Hunting!