画像とビデオの読み込みと書き込み

cv::LoadImage

IplImage* cvLoadImage(const char* filename, int iscolor=CV_LOAD_IMAGE_COLOR)

ファイルから IplImage として画像を読み込みます.

パラメタ:
  • filename – 読み込むファイル名
  • iscolor

    読み込む画像のカラーの種類を指定します:

    • CV_LOAD_IMAGE_COLOR 画像は,強制的に3チャンネルカラー画像として読み込まれます
    • CV_LOAD_IMAGE_GRAYSCALE 画像は,強制的にグレースケール画像として読み込まれます
    • CV_LOAD_IMAGE_UNCHANGED 画像は,そのままの画像として読み込まれます

関数 cvLoadImage は,指定したファイルから画像を読み込み,その画像へのポインタを返します.現在のところ,以下のファイルフォーマットがサポートされています:

  • Windows bitmaps - BMP, DIB
  • JPEG files - JPEG, JPG, JPE
  • Portable Network Graphics - PNG
  • Portable image format - PBM, PGM, PPM
  • Sun rasters - SR, RAS
  • TIFF files - TIFF, TIF

現在の実装では,アルファチャンネルがもしあったとしても,出力画像からは取り除かれることに注意してください.例えば,4チャンネルRGBA画像は,RGB画像として読み込まれます.

cv::LoadImageM

CvMat* cvLoadImageM(const char* filename, int iscolor=CV_LOAD_IMAGE_COLOR)

ファイルから,CvMatとして画像を読み込みます.

パラメタ:
  • filename – 読み込むファイル名
  • iscolor

    読み込む画像のカラーの種類を指定します:

    • CV_LOAD_IMAGE_COLOR 画像は,強制的に3チャンネルカラー画像として読み込まれます
    • CV_LOAD_IMAGE_GRAYSCALE 画像は,強制的にグレースケール画像として読み込まれます
    • CV_LOAD_IMAGE_UNCHANGED 画像は,そのままの画像として読み込まれます

関数 cvLoadImageM は,指定されたファイルから画像を読み込み,その画像へのポインタを返します. 現在は,以下のファイルフォーマットをサポートしています:

  • Windows bitmaps - BMP, DIB
  • JPEG files - JPEG, JPG, JPE
  • Portable Network Graphics - PNG
  • Portable image format - PBM, PGM, PPM
  • Sun rasters - SR, RAS
  • TIFF files - TIFF, TIF

現在の実装では,アルファチャンネルがもしあったとしても,出力画像からは取り除かれることに注意してください.例えば,4チャンネルRGBA画像は,RGB画像として読み込まれます.

cv::SaveImage

int cvSaveImage(const char* filename, const CvArr* image)

指定したファイルに画像を保存します.

パラメタ:
  • filename – ファイル名
  • image – 保存される画像

関数 cvSaveImage は,指定したファイルに画像を保存します.画像フォーマットは, filename の拡張子により決定されます( LoadImage を参照してください).この関数では,8ビットシングルチャンネル,あるいは3チャンネル(チャンネルは ‘BGR’ の順番)画像のみを保存することができます.ビット深度やチャンネル順序が異なったフォーマットの場合,保存する前に関数 cvCvtScalecvCvtColor を利用して変換するか,汎用的な関数 cvSave を利用して,XML,YAMLフォーマットで保存します.

CvCapture

CvCapture

ビデオキャプチャ構造体.

typedef struct CvCapture CvCapture()

構造体 CvCapture は,パブリックインタフェースを持たず,ビデオキャプチャ関数のパラメータとしてのみ利用されます.

cv::CaptureFromCAM

CvCapture* cvCaptureFromCAM(int index)

カメラからのビデオキャプチャを初期化します.

Parameter:index – 利用されるカメラのインデックス.カメラが1台しかないか,どのカメラを使うかが問題ではない場合は,-1 を渡しても構いません

関数 cvCaptureFromCAM は,カメラからビデオストリームを読み込むための構造体 CvCapture を確保,初期化します.現在のところ,Windowsでは Video for Windows (VFW) および Matrox Imaging Library (MLL)の2つ,Linux では V4L および FireWire (IEEE1394)の2つのカメラインタフェースを利用できます.

この構造体を解放するには, ReleaseCapture を利用してください.

cv::CaptureFromFile

CvCapture* cvCaptureFromFile(const char* filename)

ファイルからのビデオキャプチャを初期化します.

Parameter:filename – ビデオファイル名

関数 cvCaptureFromFile は,指定されたファイルからビデオストリームを読み込むための構造体 CvCapture を確保し,それを初期化します.どのようなコーデックとファイルフォーマットがサポートされるかは,バックエンドのライブラリに依存します.Windows HighGuiでは,Video for Windows (VFW) が利用され,Linux では,ffmpegが,Mac OS X では,QuickTime が用いられます.どのようなビデオファイルをどのように用意するかに関しては,それぞれのビデオコーデックの説明を参照してください.

確保された構造体が使われなくなった後は,関数 ReleaseCapture によって解放されるべきです.

cv::GetCaptureProperty

double cvGetCaptureProperty(CvCapture* capture, int property_id)

ビデオキャプチャのプロパティを取得します.

パラメタ:
  • capture – ビデオキャプチャ構造体
  • property_id

    プロパティID.以下のうちの1つ:

    • CV_CAP_PROP_POS_MSEC ミリ秒単位で表される,フィルム中の現在位置,あるいはビデオキャプチャのタイムスタンプ値
    • CV_CAP_PROP_POS_FRAMES 次にデコード/キャプチャされるフレームのインデックス.0基準
    • CV_CAP_PROP_POS_AVI_RATIO ビデオファイル内の相対的な位置(0 - ファイルの開始位置, 1 - ファイルの終了位置)
    • CV_CAP_PROP_FRAME_WIDTH ビデオストリーム中のフレームの幅
    • CV_CAP_PROP_FRAME_HEIGHT ビデオストリーム中のフレームの高さ
    • CV_CAP_PROP_FPS フレームレート
    • CV_CAP_PROP_FOURCC コーデックを表す4文字コード
    • CV_CAP_PROP_FRAME_COUNT ビデオファイル中のフレーム数
    • CV_CAP_PROP_BRIGHTNESS 画像の明るさ(カメラの場合のみ)
    • CV_CAP_PROP_CONTRAST 画像のコントラスト(カメラの場合のみ)
    • CV_CAP_PROP_SATURATION 画像の彩度(カメラの場合のみ)
    • CV_CAP_PROP_HUE 画像の色相(カメラの場合のみ)

関数 cvGetCaptureProperty は,カメラあるいはビデオファイルの指定されたプロパティを取得します.

cv::GrabFrame

int cvGrabFrame(CvCapture* capture)

カメラあるいはファイルからのフレームを確定します.

Parameter:capture – ビデオキャプチャ構造体

関数 cvGrabFrame は,カメラあるいはファイルからのフレームを確定します.確定されたフレームは,構造体内部に保存されます.この関数の目的は,複数のカメラを同時に読み込む必要がある場合でも同期がとれるように,フレームを 高速に 確定することです.確定されたフレームは,(カメラ/ドライバによって定義される)圧縮フォーマットで保存されている可能性があるので,これをこのまま扱うことはありません.確定されたフレームを実際に取り出すには, RetrieveFrame を利用します.

cv::QueryFrame

IplImage* cvQueryFrame(CvCapture* capture)

カメラあるいはファイルからフレームを取得し,それを返します.

Parameter:capture – ビデオキャプチャ構造体

関数 cvQueryFrame は,カメラあるいはビデオファイルからフレームを取得し,それを展開して返します.この関数は,単に関数 GrabFrameRetrieveFrame の組み合わせですが,1度の呼び出しで済みます.返された画像は,ユーザによって解放されたり変更されたりするべきではありません.また,エラーが起きて,NULLが返される場合もあります.

cv::ReleaseCapture

void cvReleaseCapture(CvCapture** capture)

構造体 CvCapture を解放します.

Parameter:capture – ビデオキャプチャ構造体へのポインタ

関数 cvReleaseCapture は, CaptureFromFile または CaptureFromCAM によって確保された構造体 CvCapture を解放します.

cv::RetrieveFrame

IplImage* cvRetrieveFrame(CvCapture* capture)

cvGrabFrame によって確定された画像を実際に取り出します.

Parameter:capture – ビデオキャプチャ構造体

関数 cvRetrieveFrame は,関数 GrabFrame によって確定された画像へのポインタを返します.返された画像は,ユーザによって解放されたり変更されたりするべきではありません.また,エラーが起きて,NULLが返される場合もあります.

cv::SetCaptureProperty

int cvSetCaptureProperty(CvCapture* capture, int property_id, double value)

ビデオキャプチャプロパティを設定します.

パラメタ:
  • capture – ビデオキャプチャ構造体
  • property_id

    プロパティID.以下のうちの1つ:

    • CV_CAP_PROP_POS_MSEC ミリ秒単位で表される,フィルム中の現在位置,あるいはビデオキャプチャのタイムスタンプ値
    • CV_CAP_PROP_POS_FRAMES 次にデコード/キャプチャされるフレームのインデックス.0基準
    • CV_CAP_PROP_POS_AVI_RATIO ビデオファイル内の相対的な位置(0 - ファイルの開始位置, 1 - ファイルの終了位置)
    • CV_CAP_PROP_FRAME_WIDTH ビデオストリーム中のフレームの幅
    • CV_CAP_PROP_FRAME_HEIGHT ビデオストリーム中のフレームの高さ
    • CV_CAP_PROP_FPS フレームレート
    • CV_CAP_PROP_FOURCC コーデックを表す4文字コード
    • CV_CAP_PROP_BRIGHTNESS 画像の明るさ(カメラの場合のみ)
    • CV_CAP_PROP_CONTRAST 画像のコントラスト(カメラの場合のみ)
    • CV_CAP_PROP_SATURATION 画像の彩度(カメラの場合のみ)
    • CV_CAP_PROP_HUE 画像の色相(カメラの場合のみ)
  • value – プロパティの値

関数 cvSetCaptureProperty は,ビデオキャプチャの指定されたプロパティを設定します.現在のところ,この関数はビデオファイルのみをサポートしています: CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES, CV_CAP_PROP_POS_AVI_RATIO

現在のところ,FFMPEGを利用するLinuxの最新のCVS版を利用する場合は,この関数は何もしないことに注意してください(関数の中身は if 0 で隠されています).

cv::CreateVideoWriter

typedef struct CvVideoWriter CvVideoWriter CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1)

ビデオファイルライタを作成します.

パラメタ:
  • filename – 出力されるビデオファイル名
  • fourcc – フレームを圧縮するのに用いられるコーデックを示す4文字コード.例えば, CV_FOURCC('P','I','M,'1') は,MPEG-1 コーデック, CV_FOURCC('M','J','P','G') は,モーションJPEGコーデックを表します. Win32環境では,-1 を指定して,圧縮方法と圧縮パラメータを選択するダイアログを出すことができます. Win32環境で0が指定され,さらにファイル名がaviの拡張子であれば,非圧縮AVIファイルを生成するビデオライタが作成されます
  • fps – 作成されるビデオストリームのフレームレート
  • frame_size – ビデオフレームのサイズ
  • is_color – これが0以外であれば,カラーフレームとしてエンコードを行います.そうでなければ,グレースケールフレームとして動作します(このフラグは,現在のところWindows環境でのみサポートされています)

関数 cvCreateVideoWriter は,ビデオライタ構造体を作成します.

どのようなコーデックやファイルフォーマットがサポートされるかは,バックエンドのライブラリに依存します.WindowsのHighGuiではVideo for Windows (VFW)が,Linuxではffmpeg,Mac OS XではQuickTimeが利用されます.ファイルの仕様については,それぞれのビデオコーデックを参照してください.

cv::ReleaseVideoWriter

void cvReleaseVideoWriter(CvVideoWriter** writer)

ビデオライタを解放します.

Parameter:writer – ビデオライタ構造体へのポインタ

関数 cvReleaseVideoWriter は,ビデオファイルへの書き込みを終了し,その構造体を解放します.

cv::WriteFrame

int cvWriteFrame(CvVideoWriter* writer, const IplImage* image)

ビデオファイルにフレームを書き込みます.

パラメタ:
  • writer – ビデオライタ構造体
  • image – 書き込まれるフレーム

関数 cvWriteFrame は,1つのフレームをビデオファイルに書き込み/追加します.