動画のインポート動画動画のインポート動画の読み込みフレームの抽出
バージョン情報
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(); // ビデオリーダを閉じる
}
}
|