OpenCVでビデオを読み込む

#contents

*CvCapture* cvCaptureFromFile(char *filename); [#r5757b22]

ビデオからのキャプチャ構造体を生成する

**引数 [#n7fd104b]
-filename:const char*型のファイル名

**返り値 [#j3585c59]
-失敗した場合はNULL
-成功した場合は有効なキャプチャ構造体のポインタを返す

*void cvReleaseCapture(CvCapture **capture); [#daefdefe]

確保されたキャプチャ構造体を解放する

**引数 [#l605943f]
-capture:CvCapture**型のキャプチャ構造体

**返り値 [#z85e913f]
-void型なのでなし

*IplImage* cvQueryFrame(CvCapture *capture); [#b06e8c15]
ファイルから1フレーム画像を取得してくる

**引数 [#s74a2c83]
-capture:CvCapture*型のキャプチャ構造体
**返り値 [#dc099679]
-IplImage*型の画像のポインタ

*解説 [#kd2241a9]
-OpenCVで生成した非圧縮AVIはOpenCVで読み込むと失敗する模様
-1度圧縮する必要がある
-失敗した場合はいずれも1024バイトだけ先頭のポインタがずれる.
-image->imageData += 0x400 とすると合う.

|ソフト|サイズ|fps|色|codec|結果|
|OpenCV|320x240|29.97|24bpp|非圧縮|×|
|OpenCV|640x480|29.97|24bps|非圧縮|×|
|OpenCV|512x512|29.97|24bps|非圧縮|×|
|AviUtl 0.99d3|320x240|29.97|24bpp|非圧縮|×((AviUtlの入力動画が既に壊れてるのか,出力するときに壊れたのか不明))|
|AviUtl 0.99d3|640x480|29.97|24bpp|非圧縮|×((AviUtlの入力動画が既に壊れてるのか,出力するときに壊れたのか不明))|
|QuickCapture|160x120|29.97|24bpp|IndeoR video 5.10|○|
|QuickCapture|320x240|29.97|24bpp|IndeoR video 5.10|○|
|QuickCapture|640x480|14.98|24bpp|IndeoR video 5.10|○|

*サンプルコード [#m745369e]
 CvCapture *video;                           // キャプチャ構造体
 IplImage *image;                            // 画像のポインタ(領域確保は不要)
 cvNamedWindow(WINDOW_INPUT);                // ウィンドウ生成
 video     = cvCaptureFromAVI(DEFAULT_VIDEO);//キャプチャ構造体生成
 while(c   = cvWaitKey(1), c != 27){         // ループ
     image = cvQueryFrame(video);            // ビデオから1枚取得
     cvShowImage(WINDOW_INPUT, image);       // 画面に表示
 }
 cvReleaseCapture(&video);                   // ビデオ構造体解放
 cvDestroyWindow(WINDOW_INPUT);              // ウィンドウ破棄
 // imageはこの場合解放してはいけないらしい
 
*実体ファイル [#c2fe10d0]
-otherlibs/highgui.highgui.h
-内部構造はブラックボックス的

ジャンル[[:OpenCV]][[:OpenCV 1.0]]準拠

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS