Minimum Origin Version Required: Origin 93 SR0
Origin Cは、ビデオファイルの読み取りと動画のフレームの行列へのインポートのためにVideoReaderクラスを提供しています。
このVideoReader クラスを使用するために、ヘッダファイル"VideoReader.h" をソースコードにインクルードする必要があります。
#include <..\OriginLab\VideoReader.h>
VideoReaderクラスで、動画ファイルを開き、フレーム数、フレーム率(フレーム/秒)、現在の位置などのプロパティを取得できます。また、検索フレーム、検索時間、行列オブジェクトへの読み込みフレームのためのメソッドを提供しています。
次のサンプルでは、新しい行列ブックを作成し、動画内の10フレームを探します。そして、他のフレームをスキップすることにより、100フレームを行列オブジェクトとして、アクティブ行列シートにロードします。
#include <..\Originlab\VideoReader.h> // ヘッダファイルをインクルード void Import_Video_Ex1(string strFile = "d:\test.avi") { MatrixLayer ml; ml.Create("Origin"); // フレームのための行列シートを作成 char str[MAXLINE]; VideoReader vr; // VideoReaderを宣言 strcpy(str, strFile); if(!vr.Open(str)) { // 動画ファイルを開く out_str("Failed to open video file!"); return; } // フレーム数取得 int iFrameCount = (int)vr.GetFrameCount(); printf("%u frames\n",iFrameCount); // 開始フレーム int iOffset = 10; // 読み込むフレームの合計を指定 int iTotalFrames = 100; // 各読み込み間でスキップするフレームを指定 int iSkip = 1; // 全ての他のフレームを読み込む bool bRet = vr.SeekFrame(iOffset); vr.ReadFrames(ml, iTotalFrames, iSkip); // フレームを読み込む if(vr.ReaderReady()) { vr.Close(); // ビデオリーダを閉じる } }
このサンプルでは、時間が測定基準として使用されています。
#include <..\Originlab\VideoReader.h> // ヘッダファイルをインクルード void Import_Video_Ex2(string strFile = "d:\test.avi") { MatrixLayer ml; ml.Create("Origin"); // フレームのための行列シートを作成 char str[MAXLINE]; VideoReader vr; // VideoReaderを宣言 strcpy(str, strFile); if(!vr.Open(str)) { // 動画ファイルを開く out_str("Failed to open video file!"); return; } // フレーム数を取得 int iFrameCount = (int)vr.GetFrameCount(); // フレーム率を取得 double dFPS = vr.GetFPS(); double dRunningTime = iFrameCount / dFPS; printf("%u frames at %f fps with a running time of %f seconds\n", iFrameCount, dFPS, dRunningTime); // 読み込みのためのセットアップ double dStartTime = 5; // 5秒で読み込み開始 double dSkipLength = 3.333; // 読み込みの間で3.333秒スキップ vr.SeekFrame((int) dStartTime * dFPS); // フレーム開始を計算 int iSkip = (int) dSkipLength * dFPS; // スキップするフレーム数を計算 // 実際に読み込むフレームの数を計算 int iTotalFrames = (int) ( (dRunningTime - dStartTime) * dFPS) / (iSkip + 1); vr.ReadFrames(ml, iTotalFrames, iSkip); // フレームを読み込み if(vr.ReaderReady()) { vr.Close(); // ビデオリーダを閉じる } }