MATLAB によるビデオからフレームを抽出する

Ammar Ali 2022年2月8日
MATLAB によるビデオからフレームを抽出する

このチュートリアルでは、Matlab の read() 関数を使用してビデオのフレームを抽出する方法について説明します。

MATLAB の read() 関数を使用してビデオからフレームを抽出する

ビデオは多くのフレームで構成されています。つまり、画像で構成されているため、画像やフレームが次々と繰り返されると、ビデオが再生されます。たとえば、ビデオが 1 秒あたり 60 フレームで構成されているとします。これは、1 秒あたり 60 フレームになることを意味します。フレームは非常に速く変化するため、ビデオの再生のみが表示されます。まず、関数 VideoReader() を使用して Matlab でビデオを読み取る必要があります。その後、NumberOfFrames プロパティを使用して、ビデオに存在するフレームの総数を求める必要があります。for ループを使用します。これは、1 から始まり、ビデオの最大フレーム数で終わります。次に、ビデオに存在する各フレームを見つけ、関数 subplot() および imshow() を使用してプロットに表示します。たとえば、ビデオを読んで、Matlab ですべてのフレームを抽出してみましょう。以下のコードを参照してください。

v = VideoReader('bon_fire_dog_2.mp4');
totalFrames = v.NumberOfFrames;
NFP = ceil(sqrt(totalFrames));
for i=1:totalFrames
frame = read(v,i);
subplot(NFP,NFP,i)
imshow(frame)
end

出力:

ビデオフレーム

上記のコードでは、変数 NPF が上の図の行と列の数を設定します。imwrite() 関数を使用して、各フレームを画像としてフォルダ内に保存することもできます。以下のコードを参照してください。

v = VideoReader('bon_fire_dog_2.mp4');
totalFrames = v.NumberOfFrames;
NFP = ceil(sqrt(totalFrames));
for i=1:totalFrames
frame = read(v,i);
ImgName = strcat(int2str(i),'.png');
imwrite(frame, ImgName);
end

上記のコードは、ビデオに存在するすべてのフレームを、スクリプトファイルと同じディレクトリ内に .png ファイル形式の画像として保存します。画像のファイル名とファイル拡張子を変更することもできます。ビデオからすべてのフレームを抽出するのではなく、ビデオの最初のフレームのみを抽出する場合。これを行うには、read() 関数の 2 番目の引数を read(v,1) のように 1 に変更する必要があります。ビデオの最後のフレームを抽出する場合は、2 番目の引数を read(v,inf) のように inf に変更する必要があります。ビデオから特定の範囲のフレームを抽出する場合は、2 番目の引数を vector に変更する必要があります。たとえば、read(v,[5 10]) 関数を使用して、ビデオ v から 5 から 10 までのフレームを読み取ることができます。

著者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook