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

cv::imdecode

Comments from the Wiki

Mat imdecode(const Mat& buf, int flags)

メモリバッファから画像を読み込みます.

パラメタ:
  • buf – バイト列を含む入力配列.
  • flagsimread で利用されるものと同じフラグ.

この関数は,指定されたメモリ上のバッファから画像を読み込みます. バッファが小さすぎる,または有効なデータを含んでいない場合,空の行列が返されます.

サポートされるフォーマットの一覧とフラグの説明に関しては, imread を参照してください.

cv::imencode

Comments from the Wiki

bool imencode(const string& ext, const Mat& img, vector<uchar>& buf, const vector<int>& params=vector<int>())

メモリバッファに画像をエンコード(書き出し)します.

パラメタ:
  • ext – 出力フォーマットを定義する,ファイルの拡張子.
  • img – 書き出される画像.
  • buf – 出力バッファ.圧縮された画像にフィットするようにリサイズされます.
  • params – フォーマットを指定するパラメータ. imwrite を参照してください.

この関数は,画像を圧縮しメモリバッファに格納します.そのバッファは,出力結果にフィットするようにリサイズされます. サポートされるフォーマットの一覧とフラグの説明に関しては, imwrite を参照してください.

cv::imread

Comments from the Wiki

Mat imread(const string& filename, int flags=1)

ファイルから画像を読み込みます.

パラメタ:
  • filename – 読み込まれるファイルの名前.
  • flags

    読み込まれる画像のカラータイプを指定.

    • >0 画像は,強制的に3チャンネルカラー画像として読み込まれます.
    • =0 画像は,強制的にグレースケール画像として読み込まれます.
    • <0 画像は,そのままの画像として読み込まれます(現在の実装では,アルファチャンネルがもしあったとしても,出力画像からは取り除かれることに注意してください.例えば, flags\ge0 の場合でも,4チャンネルRGBA画像はRGB画像として読み込まれます).

関数 imread は,指定されたファイルから画像を読み込み,それを返します.(ファイルが存在しない,不適切なパーミッション,未サポートまたは無効なフォーマット,などの理由により)画像が読み込めない場合は,この関数は空の行列( Mat::data==NULL )を返します.現在は,以下のファイルフォーマットをサポートしています:

  • Windows bitmaps - *.bmp, *.dib (常にサポートされます)
  • JPEG files - *.jpeg, *.jpg, *.jpe注意2 を参照してください)
  • JPEG 2000 files - *.jp2注意2 を参照してください)
  • Portable Network Graphics - *.png注意2 を参照してください)
  • Portable image format - *.pbm, *.pgm, *.ppm (常にサポートされます)
  • Sun rasters - *.sr, *.ras (常にサポートされます)
  • TIFF files - *.tiff, *.tif注意2 を参照してください)

注意1 : この関数は,画像の種類をファイルの拡張子からではなく,その内容から判別します.

注意2 : Windows と MacOSX 環境では,OpenCVで使われる標準の画像コーデック(libjpeg, libpng, libtiff そして libjasper)がデフォルトで利用されます.よって,OpenCVは常に JPEGs, PNGs, TIFFs を読み込むことができます.MacOSXでは,ネイティブなMacOSX画像ローダを利用するためのオプションもあります.しかし現在は,MacOSXに組み込まれたカラーマネジメントにより,これらのネイティブな画像ローダを利用すると,画像のピクセル値が多少異なるものになることに注意してください.

Linux, BSD系,その他のUnix系のオープンソースOS環境では,OpeNCV は OSが提供する画像コーデックを探します.コーデックのサポートを得るために,関連パッケージを(開発ファイル,例えば「libjpeg-dev」など,を忘れずに)インストールするか,あるいは,CMakeで OPENCV_BUILD_3RDPARTY_LIBS を ON にしてください.

cv::imwrite

Comments from the Wiki

bool imwrite(const string& filename, const Mat& img, const vector<int>& params=vector<int>())

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

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

    フォーマット個別の保存パラメータ. paramId_1, paramValue_1, paramId_2, paramValue_2, ... という形式にエンコードされています.現在のところ,以下のパラメータをサポートしています:

    • JPEG の場合,これは品質 ( CV_IMWRITE_JPEG_QUALITY ) を表し,0から100までの値(高い値になるほど品質が良くなります)をとります.デフォルトでは95です.
    • PNG の場合,これは圧縮レベル
      ( CV_IMWRITE_PNG_COMPRESSION ) を表し,0から9までの値(高い値になるほど,ファイルサイズは小さくなりますが圧縮時間もかかります)をとります.デフォルトでは3です.
    • PPM, PGM または PBM の場合,これはバイナリフォーマットフラグ ( CV_IMWRITE_PXM_BINARY ) を表し,0または1の値をとります.デフォルトは1です.

関数 imwrite は,指定したファイルに画像を保存します.画像フォーマットは, filename の拡張子によって決まります.サポートされる拡張子の一覧については imread を参照してください.この関数によって保存できるのは,8ビット(PNG, JPG 2000, TIFF の場合は 16ビット)のシングルチャンネル,または3チャンネル(チャンネルは’BGR’の順序)の画像だけです.フォーマットやビット深度,チャンネル順序が異なる場合は, Mat::convertTocvtColor を用いて保存前に画像を変換するか,一般的な XML 入出力関数を用いて,画像を XML や YAML フォーマットで保存します.

VideoCapture

Comments from the Wiki

VideoCapture

ビデオファイルやカメラからキャプチャを行うためのクラス.

class VideoCapture
{
public:
    // デフォルトコンストラクタ
    VideoCapture();
    // ビデオファイルをオープンするコンストラクタ
    VideoCapture(const string& filename);
    // カメラからのストリーミングを開始するコンストラクタ
    VideoCapture(int device);

    // デストラクタ
    virtual ~VideoCapture();

    // 指定されたビデオファイルをオープンします.
    virtual bool open(const string& filename);

    // ID で指定されたカメラからのストリーミングを開始します.
    virtual bool open(int device);

    // ファイルのオープンに成功している,またはカメラの初期化に成功
    // している場合は, true を返します.
    virtual bool isOpened() const;

    // カメラのストリームまたはビデオファイルをクローズします.
    // (デストラクタによって自動的に呼び出されます)
    virtual void release();

    // 次のフレーム,マルチカメラの場合は次のフレーム集合,を確定します.
    // これ以上のフレームがない場合は,偽値を返します.
    virtual bool grab();
    // 指定されたビデオストリームからフレームを読み出します.
    // (マルチカメラのライブストリームでは,非 0 のチャンネルのみが有効です)
    virtual bool retrieve(Mat& image, int channel=0);
    // grab() + retrieve(image, 0); と等価です.
    virtual VideoCapture& operator >> (Mat& image);

    // 指定のプロパティ propId に指定の値 value をセットします.
    virtual bool set(int propId, double value);
    // 指定のプロパティの値を取得します.
    virtual double get(int propId);

protected:
    ...
};

このクラスは,C++ ビデオキャプチャ API を提供します.このクラスを利用するには,次のようにします:

#include "cv.h"
#include "highgui.h"

using namespace cv;

int main(int, char**)
{
    VideoCapture cap(0); // デフォルトカメラをオープン
    if(!cap.isOpened())  // 成功したかどうかをチェック
        return -1;

    Mat edges;
    namedWindow("edges",1);
    for(;;)
    {
        Mat frame;
        cap >> frame; // カメラから新しいフレームを取得
        cvtColor(frame, edges, CV_BGR2GRAY);
        GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
        Canny(edges, edges, 0, 30, 3);
        imshow("edges", edges);
        if(waitKey(30) >= 0) break;
    }
    // VideoCapture デストラクタにより,カメラは自動的に終了処理されます
    return 0;
}

cv::VideoCapture::VideoCapture

Comments from the Wiki

VideoCapture::VideoCapture()
VideoCapture::VideoCapture(const string& filename)
VideoCapture::VideoCapture(int device)
パラメタ:
  • filename – TOWRITE
  • device – TOWRITE

VideoCapture コンストラクタ.

cv::VideoCapture::get

Comments from the Wiki

double VideoCapture::get(int property_id)
パラメタ:
  • 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_FORMAT retrieve() によって返されるMat オブジェクトのフォーマット.
    • CV_CAP_PROP_MODE 現在のキャプチャモードを表す,バックエンド固有の値.
    • CV_CAP_PROP_BRIGHTNESS 画像の明るさ(カメラの場合のみ).
    • CV_CAP_PROP_CONTRAST 画像のコントラスト(カメラの場合のみ).
    • CV_CAP_PROP_SATURATION 画像の彩度(カメラの場合のみ).
    • CV_CAP_PROP_HUE 画像の色相(カメラの場合のみ).
    • CV_CAP_PROP_GAIN 画像のゲイン(カメラの場合のみ).
    • CV_CAP_PROP_EXPOSURE 露出(カメラの場合のみ).
    • CV_CAP_PROP_CONVERT_RGB 画像がRGBに変換されるか否かを表す,ブール値のフラグ.
    • CV_CAP_PROP_WHITE_BALANCE 現在のところサポートされていません.
    • CV_CAP_PROP_RECTIFICATION TOWRITE(注意:現在のところ,DC1394 v 2.x バックエンドでのみサポートされます).

VideoCapture クラスのバックエンドでサポートしていないプロパティが要求されると,値として 0 が返されることに注意してください.

cv::VideoCapture::set

Comments from the Wiki

bool VideoCapture::set(int property_id, double value)
パラメタ:
  • 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_FORMAT retrieve() によって返されるMat オブジェクトのフォーマット.
    • CV_CAP_PROP_MODE 現在のキャプチャモードを表す,バックエンド固有の値.
    • CV_CAP_PROP_BRIGHTNESS 画像の明るさ(カメラの場合のみ).
    • CV_CAP_PROP_CONTRAST 画像のコントラスト(カメラの場合のみ).
    • CV_CAP_PROP_SATURATION 画像の彩度(カメラの場合のみ).
    • CV_CAP_PROP_HUE 画像の色相(カメラの場合のみ).
    • CV_CAP_PROP_GAIN 画像のゲイン(カメラの場合のみ).
    • CV_CAP_PROP_EXPOSURE 露出(カメラの場合のみ).
    • CV_CAP_PROP_CONVERT_RGB 画像がRGBに変換されるか否かを表す,ブール値のフラグ.
    • CV_CAP_PROP_WHITE_BALANCE 現在のところサポートされていません.
    • CV_CAP_PROP_RECTIFICATION TOWRITE(注意:現在のところ,DC1394 v 2.x バックエンドでのみサポートされます).
  • value – プロパティの値.

VideoCapture バックエンドのプロパティを設定します.

VideoWriter

Comments from the Wiki

VideoWriter

ビデオライタクラス.

class VideoWriter
{
public:
    // デフォルトコンストラクタ
    VideoWriter();
    // open を呼び出すコンストラクタ
    VideoWriter(const string& filename, int fourcc,
                double fps, Size frameSize, bool isColor=true);

    // デストラクタ
    virtual ~VideoWriter();

    // ファイルをオープンし,ビデオライタを初期化します.
    // filename - 出力ファイル名
    // fourcc - コーデック
    // fps - 1 秒あたりのフレーム数
    // frameSize - ビデオフレームのサイズ
    // isColor - ビデオストリームがカラーか,グレースケールかを指定
    virtual bool open(const string& filename, int fourcc,
                      double fps, Size frameSize, bool isColor=true);

    // ビデオライタの初期化に成功している場合には true を返します.
    virtual bool isOpened() const;

    // ストリームに次のビデオフレームを書き込みます.
    virtual VideoWriter& operator << (const Mat& image);

protected:
    ...
};

目次

このページ