2

yuv 420ビデオからフレームを抽出するにはどうすればよいですか?静止画として保存したいとしましょう。どのように?

4

3 に答える 3

1

これがMathWorksFileExchangeからの提出であり、あなたが望むことをするはずです。

上記の送信からの関数loadFileYuvは、YUVファイルをロードし、ムービーフレームの配列を返します。各ムービーフレームは、次のフィールドを持つ構造です。

  • cdata:値のマトリックスuint8。寸法は、高さ×幅×3です。
  • colormap:doubleのN行3列の行列。トゥルーカラーシステムでは空です。

cdataしたがって、配列内の各ムービーフレームからフィールドを抽出し、RGB画像として保存/使用できます。

コードは次のようになります。

nFrames = 115;     %# The number of frames
vidHeight = 352;   %# The image height
vidWidth = 240;    %# The image width
mov = loadFileYuv('myVideo.yuv',vidHeight,vidWidth,1:nFrames);  %# Read the file
for k = 1:nFrames  %# Loop over the movie frames
  imwrite(mov(k).cdata,['myImage' int2str(k) '.bmp']);  %# Save each frame to
                                                        %#   a bitmap image file
end
于 2010-09-01T02:05:15.760 に答える
0

申し訳ありませんが、matlabを使用することはできませんが、コマンドラインでffmpegを使用して実行できます。

ffmpeg -i input.yuv -r 1 -f image2 images%05d.png

-r 1は、レート=すべてのフレームを意味します

于 2010-09-01T01:40:36.113 に答える
0

以下のコードを使用できます。

vidObj1 = mmreader('testballroom_0.avi');  %# Create a video file object
nFrames = vidObj1.NumberOfFrames;   %# Get the number of frames
vidHeight1 = vidObj1.Height;         %# Get the image height
vidWidth1 = vidObj1.Width;           %# Get the image width

%# Preallocate the structure array of movie frames:

mov1(1:nFrames) = struct('cdata',zeros(vidHeight1,vidWidth1,3,'uint8'),...
                    'colormap',[]);  %# Note that colormap is empty!

マトリックスmov1から各フレームにアクセスできます:)

于 2013-10-06T19:10:58.507 に答える