OpenCVでビデオを読み込む

CvCapture* cvCaptureFromFile(char *filename);

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

引数

  • filename:const char*型のファイル名

返り値

  • 失敗した場合はNULL
  • 成功した場合は有効なキャプチャ構造体のポインタを返す

void cvReleaseCapture(CvCapture **capture);

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

引数

  • capture:CvCapture**型のキャプチャ構造体

返り値

  • void型なのでなし

IplImage* cvQueryFrame(CvCapture *capture);

ファイルから1フレーム画像を取得してくる

引数

  • capture:CvCapture*型のキャプチャ構造体

返り値

  • IplImage*型の画像のポインタ

解説

  • OpenCVで生成した非圧縮AVIはOpenCVで読み込むと失敗する模様
  • 1度圧縮する必要がある
  • 失敗した場合はいずれも1024バイトだけ先頭のポインタがずれる.
  • image->imageData += 0x400 とすると合う.
ソフトサイズfpscodec結果
OpenCV320x24029.9724bpp非圧縮×
OpenCV640x48029.9724bps非圧縮×
OpenCV512x51229.9724bps非圧縮×
AviUtl 0.99d3320x24029.9724bpp非圧縮×*1
AviUtl 0.99d3640x48029.9724bpp非圧縮×*2
QuickCapture160x12029.9724bppIndeoR video 5.10
QuickCapture320x24029.9724bppIndeoR video 5.10
QuickCapture640x48014.9824bppIndeoR video 5.10

サンプルコード

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はこの場合解放してはいけないらしい

実体ファイル

  • otherlibs/highgui.highgui.h
  • 内部構造はブラックボックス的

ジャンル:OpenCV:OpenCV 1.0準拠


*1 AviUtlの入力動画が既に壊れてるのか,出力するときに壊れたのか不明
*2 AviUtlの入力動画が既に壊れてるのか,出力するときに壊れたのか不明

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-27 (木) 11:31:56 (2738d)