C++とOpenCVでPC内の動画ファイルを読み込んで再生する方法
この記事では、OpenCVを使って動画ファイルを読み込み、再生する方法を解説します。基本的な流れは、前回の記事で学んだWebカメラからの映像取得とほぼ同じです。唯一の違いは、VideoCaptureクラスのオブジェクト生成時に引数としてカメラ番号を指定する代わりに、読み込みたい動画ファイルのパスを指定するという点です。
以下のサンプルプログラムは、C++とOpenCVを使用して、コンピュータ上に保存された動画ファイルを読み込み、再生する方法を示しています。
サンプルコード
#include<opencv2/opencv.hpp>//VideoCaptureクラスを使用するためのOpenCVヘッダー//
#include<iostream>
using namespace std;
using namespace cv;
int main() {
Mat myImage;//フレームを格納するための行列を宣言//
namedWindow("Video Player");//動画を表示するためのウィンドウを宣言//
VideoCapture cap("video.mp4");//動画ファイルからフレームストリームを取得するオブジェクトを宣言//
if (!cap.isOpened()){ //動画ストリームが見つからない場合にエラーメッセージを表示//
cout << "No video stream detected" << endl;
system("pause");
return-1;
}
while (true){ //動画を表示し続けるための無限ループ//
cap >> myImage;
if (myImage.empty()){ //フレームが検出されなくなったらループを抜ける//
break;
}
imshow("Video Player", myImage);//動画を表示//
char c = (char)waitKey(25);//1フレームあたり25ミリ秒の処理時間を確保し、中断条件を設定//
if (c == 27){ //'Esc'キーが押されたらループを抜ける//
break;
}
}
cap.release();//バッファメモリを解放//
return 0;
}実行結果
プログラムを実行すると、「Video Player」という名前のウィンドウが開き、指定した動画ファイル(ここでは「video.mp4」)が連続的に再生されます。動画が最後まで再生されると自動的にウィンドウが閉じます。また、再生中に「Esc」キーを押すことで、いつでも再生を中断できます。
コードのポイント
- VideoCaptureクラス: 引数にカメラ番号ではなく動画ファイルのパスを渡すことで、ローカルの動画ファイルを読み込めます。相対パス・絶対パスのどちらも指定可能です。
- isOpened()による確認: ファイルが存在しない、または対応していない形式の場合は開けないため、必ずチェックしましょう。
- waitKey(25): 各フレーム間に25ミリ秒の待機時間を設けることで、おおよそ40fpsの速度で動画を再生します。値を変更することで再生速度を調整できます。
- cap.release(): 使用後はリソースを解放し、メモリリークを防ぎます。
このように、カメラ入力の場合とほぼ同じコードで、保存済みの動画ファイルを簡単に扱うことができます。動画解析や機械学習の前処理など、さまざまな場面で活用できる基本テクニックなので、ぜひマスターしておきましょう。
-
パソコンのステッカーを傷つけずにきれいに剥がす5つの方法
ノートパソコンやデスクトップPCは、私たちの生活に欠かせない存在です。仕事でもプライベートでも毎日のように使う大切な持ち物であり、自分らしさを表現するためにステッカーでカスタマイズしている方も多いのではないでしょうか。 しかし、気が変わってステッカーを張り替えたくなったり、完全に取り除きたくなったりすることもあります。とはいえ、無理に剥がすと粘着剤が残ったり、最悪の場合は本体を傷つけてしまう恐れも。そこで今回は、コンピュータからステッカーを汚さず安全に除去する方法をご紹介します。 ステッカーを剥がす前の注意点 ご存じのとおり、電子機器は非常に繊細な作りになっています。誤った方法でステッカーを
-
PC Speed Upをパソコンから完全に削除する方法【ステップ別ガイド】
パソコンを使い続けていると、動作がだんだん遅くなっていくことに気づくことがあります。その主な原因は、バックグラウンドで動作するプロセスの増加です。ウイルス対策ソフト、スパイウェア対策ツール、Windows Update、MS Officeの更新プログラム、Skypeなど、インストール済みのユーティリティが常駐することで、システム全体の速度が低下します。また、ローカルディスク(C:)の空き容量がほとんどない場合も、パフォーマンス低下の一因となります。さらに、レジストリの残骸や断片化もPCを遅くしますが、これは体感しにくいものです。 そんなとき、「PC Speed Up」という有料アプリケーション