画像とビデオの読み込みと書き込み ================================================ .. highlight:: cpp .. index:: imdecode cv::imdecode ------------ `id=0.15072130177 Comments from the Wiki `__ .. cfunction:: Mat imdecode( const Mat\& buf, int flags ) メモリバッファから画像を読み込みます. :param buf: バイト列を含む入力配列. :param flags: :ref:`imread` で利用されるものと同じフラグ. この関数は,指定されたメモリ上のバッファから画像を読み込みます. バッファが小さすぎる,または有効なデータを含んでいない場合,空の行列が返されます. サポートされるフォーマットの一覧とフラグの説明に関しては, :ref:`imread` を参照してください. .. index:: imencode cv::imencode ------------ `id=0.977034357631 Comments from the Wiki `__ .. cfunction:: bool imencode( const string\& ext, const Mat\& img, vector\& buf, const vector\& params=vector()) メモリバッファに画像をエンコード(書き出し)します. :param ext: 出力フォーマットを定義する,ファイルの拡張子. :param img: 書き出される画像. :param buf: 出力バッファ.圧縮された画像にフィットするようにリサイズされます. :param params: フォーマットを指定するパラメータ. :ref:`imwrite` を参照してください. この関数は,画像を圧縮しメモリバッファに格納します.そのバッファは,出力結果にフィットするようにリサイズされます. サポートされるフォーマットの一覧とフラグの説明に関しては, :ref:`imwrite` を参照してください. .. index:: imread cv::imread ---------- `id=0.849681839074 Comments from the Wiki `__ .. cfunction:: Mat imread( const string\& filename, int flags=1 ) ファイルから画像を読み込みます. :param filename: 読み込まれるファイルの名前. :param flags: 読み込まれる画像のカラータイプを指定. * **>0** 画像は,強制的に3チャンネルカラー画像として読み込まれます. * **=0** 画像は,強制的にグレースケール画像として読み込まれます. * **<0** 画像は,そのままの画像として読み込まれます(現在の実装では,アルファチャンネルがもしあったとしても,出力画像からは取り除かれることに注意してください.例えば, :math:`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 にしてください. .. index:: imwrite cv::imwrite ----------- `id=0.171141179043 Comments from the Wiki `__ .. cfunction:: bool imwrite( const string\& filename, const Mat\& img, const vector\& params=vector()) 指定したファイルに画像を保存します. :param filename: ファイル名. :param img: 保存される画像. :param 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`` の拡張子によって決まります.サポートされる拡張子の一覧については :ref:`imread` を参照してください.この関数によって保存できるのは,8ビット(PNG, JPG 2000, TIFF の場合は 16ビット)のシングルチャンネル,または3チャンネル(チャンネルは'BGR'の順序)の画像だけです.フォーマットやビット深度,チャンネル順序が異なる場合は, :ref:`Mat::convertTo` と :ref:`cvtColor` を用いて保存前に画像を変換するか,一般的な XML 入出力関数を用いて,画像を XML や YAML フォーマットで保存します. .. index:: VideoCapture .. _VideoCapture: VideoCapture ------------ `id=0.614286623448 Comments from the Wiki `__ .. ctype:: VideoCapture ビデオファイルやカメラからキャプチャを行うためのクラス. .. code-block:: c 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 を提供します.このクラスを利用するには,次のようにします: .. code-block:: c #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; } .. .. index:: VideoCapture::VideoCapture cv::VideoCapture::VideoCapture ------------------------------ `id=0.72840461422 Comments from the Wiki `__ .. cfunction:: VideoCapture::VideoCapture() .. cfunction:: VideoCapture::VideoCapture(const string\& filename) .. cfunction:: VideoCapture::VideoCapture(int device) :param filename: TOWRITE :param device: TOWRITE VideoCapture コンストラクタ. .. index:: VideoCapture::get cv::VideoCapture::get --------------------- `id=0.865951739957 Comments from the Wiki `__ .. cfunction:: double VideoCapture::get(int property_id) :param 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 が返されることに注意してください. .. index:: VideoCapture::set cv::VideoCapture::set --------------------- `id=0.857735741627 Comments from the Wiki `__ .. cfunction:: bool VideoCapture::set(int property_id, double value) :param 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 バックエンドでのみサポートされます). :param value: プロパティの値. VideoCapture バックエンドのプロパティを設定します. .. index:: VideoWriter .. _VideoWriter: VideoWriter ----------- `id=0.0326466207693 Comments from the Wiki `__ .. ctype:: VideoWriter ビデオライタクラス. .. code-block:: c 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: ... }; ..