我剛剛使用Matlab。我想讀取一個視頻文件,並對每一幀進行一些計算並顯示每一幀。我寫了下面的代碼,但每次只顯示第一幀。任何人都可以請幫忙。逐幀讀取和顯示視頻文件
mov=VideoReader('c:\vid\Akiyo.mp4');
nFrames=mov.NumberOfFrames;
for i=1:nFrames
videoFrame=read(mov,i);
imshow(videoFrame);
end
我剛剛使用Matlab。我想讀取一個視頻文件,並對每一幀進行一些計算並顯示每一幀。我寫了下面的代碼,但每次只顯示第一幀。任何人都可以請幫忙。逐幀讀取和顯示視頻文件
mov=VideoReader('c:\vid\Akiyo.mp4');
nFrames=mov.NumberOfFrames;
for i=1:nFrames
videoFrame=read(mov,i);
imshow(videoFrame);
end
注:
mmreader
API已經被停止MATLAB所以更喜歡使用VideoReader
。
查看評論者@Vivek。
我經常這樣做:
obj=mmreader('c:\vid\Akiyo.mp4');
nFrames=obj.NumberOfFrames;
for k=1:nFrames
img=read(obj,k);
figure(1),imshow(img,[]);
end
至於你的代碼而言,我看到了MATLAB的文檔。你應該做的事情的順序如下:
mov=VideoReader('c:\vid\Akiyo.mp4');
vidFrames=read(mov);
nFrames=mov.NumberOfFrames;
for i=1:nFrames
imshow(vidFrames(:,:,i),[]); %frames are grayscale
end
下面的推薦代碼只顯示一幀
imshow(vidFrames(:,:,i),[]);
我做下面的事情來存儲每一幀
obj = VideoReader('path/to/video/file');
for img = 1:obj.NumberOfFrames;
filename = strcat('frame',num2str(img),'.jpg');
b = read(obj,img);
imwrite(b,filename);
end
這將存儲所有在您的主目錄中的幀。是的,也如Vivek和Parag所建議的
您需要使用VideoReader作爲mmreader已被停用 MATLAB。
VideoReader中沒有'NumberOfFrames'字段 – Temak 2015-11-25 15:38:02
函數read(),現在外地NumberOfFrames()已被棄用,MATLAB建議使用
xyloObj = VideoReader(file);
vidHeight = xyloObj.Height;
vidWidth = xyloObj.Width;
mov = struct('cdata',zeros(vidHeight, vidWidth, 3,'uint8'), 'colormap',[]);
while hasFrame(xyloObj)
mov(k).cdata = readFrame(xyloObj,'native');
end
如果你想估計數目在視頻幀,使用nFrames = floor(xyloObj.Duration) * floor(xyloObj.FrameRate);
尊敬Parag,上面和下面的代碼段的主要區別是什麼?其實上面的代碼工作正常,但不是下面的代碼。下面的只顯示第一幀。謝謝。 – MMH 2013-03-21 05:12:24
我會詳細看到並回復你。 – 2013-03-21 07:37:25
最後一種方法只顯示第一幀的亮度分量。代碼應該是'imshow(vidFrames(:,:,:,i));'這樣你可以讀取每幀的亮度和色度分量。 – Akatosh 2014-04-14 13:45:35