I have a piece of code where I read an image and then do some processing with it. If I instead have an AVI file, is there a simple way to read the video file, select a chosen frame from it, and then analyse that frame as an image?
III0 = double(imread('Documents\sphereattempt.png'));
III1 = (III0(:,:,3)./(III0(:,:,1)+III0(:,:,2)+III0(:,:,3)));
figure(2);
contourf(flipud(min(max(movmean(movmean(III1,10,2),10,1),0.3),0.5)),[0.3:0.01:0.5]);
axis equal;
colorbar
set(gca,'Ydir','reverse')

 채택된 답변

David K.
David K. 2022년 4월 15일

0 개 추천

The VideoReader object looks like the way to go. With the basic case being:
v = VideoReader('example.avi');
while hasFrame(v)
frame = readFrame(v);
% processing for each frame goes here
end
Where frame is an individual image. If you want to start from a specific time you can use
v.CurrentTime = 2.5; % time in seconds to start
then use readFrame to get the frame you want.
Something that may go wrong is shown on Supported Video Formats where there is a troubleshooting section talking about how there is a chance that you will need to install some other things if your specific avi format is not currently readable by your matlab install. I have not personally tried any of these methods to fix a format issue.

댓글 수: 2

So in the processing section it would start
III0 = double(imread('frame')); ?
Not quite. The readFrame function is taking the place of the imread function in your code. If the video is X by Y pixels and is in color. The output frame from
frame = readFrame(v);
should be a X x Y x 3 uint8 array. So III0 should be
III0 = double(readFrame(v));
to make them the same as your single image.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

제품

질문:

2022년 4월 15일

댓글:

2022년 4월 15일

Community Treasure Hunt

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

Start Hunting!

Translated by