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

cv::imdecode

Mat imdecode(const Mat& buf, int flags)

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

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

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

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

cv::imencode

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

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

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

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);

    // ファイルのオープンに成功している,またはカメラの初期化に成功
    // している場合は,真値を返します.
    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:
    ...
};

The class provides C++ video capturing API. Here is how the class can be used:

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

using namespace cv;

int main(int, char**)
{
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
        return -1;

    Mat edges;
    namedWindow("edges",1);
    for(;;)
    {
        Mat frame;
        cap >> frame; // get a new frame from camera
        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;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}

VideoWriter

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);

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

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

protected:
    ...
};

目次

前のトピックへ

ユーザインタフェース

次のトピックへ

ml. 機械学習

このページ