MATLAB: Edge function error while loop video frames, VideoReader – Index in position is invalid

edgeframeMATLABvideovideoreaderwhile

v = VideoReader('images_video/Maldives.mp4');
while hasFrame(v)
frame = readFrame(v);
figure, imshow(frame);
BW = rgb2gray(frame);
edge = edge(BW, 'canny', 0.2);
figure, imshow(edge);
end
When we run this, the first frame shows with imshow(frame) then the edge function works and the first edge shows with imshow(edge), the loop starts again and the next imshow(frame) works, and then we get an error:
Index in position 3 is invalid. Array indices must be positive integers or logical values.
Otherwise, the loop runs fine. Clearly something to do with the edge function is trying to operate on itself or something. Probably something simple. Any ideas please?
MATLAB: R2018b

Best Answer

% I have tested it with the different video file, change edge name to different ones, like edge1 , as edge is the inbuilt function name and possible of name conflict.
v=VideoReader('images_video/Maldives.mp4');
while hasFrame(v)
frame=readFrame(v);
figure,imshow(frame);
BW=rgb2gray(frame);
edge1=edge(BW, 'canny', 0.2);
figure,imshow(edge1);
end
%If you try the larger video files, it may show the following error
Out of memory. Type HELP MEMORY for your options.
Otherwise the code is OK, test it will very small video file, having 10-12 frames.
On the otherhand if you remove the both imshow statement, it perfectly works if video size little larger too.
Related Question