OpenCV 3.0に果敢に挑戦し続けてみる

個人的な趣味の一環として、OpenCV 3.0がらみの情報をまとめてみる。「引用はいぃんよー、無断転載はあかんよー」ということで。

Introduction : InputArray and OutputArray

InputArray and OutputArray

OpenCV 関数の多くは、2次元もしくは多次元の複数の密集した*1配列を取り扱う。一般的に、こうした関数はパラメータとしてcpp:class:Matが用いられるが、中には利便性のために、(例:点集合のような場合)std::vector<>や、(3x3 射影変換行列のような) Matx<> を用いる場合がある。APIにおいて関数を多数複製させないために、特別な"proxy" classが導入された。基本となる"proxy" classは InputArrayである。これは関数の入力となる読み込み専用のarrayを受け渡すために用いられる。InputArray classを由来としたOutputArrayが関数の出力に用いられる。通常時、利用者はこれらの中間的なタイプについて意識する必要はない(利用者はそれぞれの厳密なタイプの変数宣言は必要がない)、これは自動的に実行される。利用者は、InputArray/OutputArrayを用いる代わりに、常にMat、std::vector<>、Matx<>、Vec<> あるいはScalarを用いることが出来る。関数が補助的な入力あるいは出力配列を持ち、利用者がそれを利用しない場合、利用したくない場合には、 cv::noArray()を渡せばよい。

 

*1:訳注:まばらに入っているのではなく全部の要素が埋められているようなイメージだと思われる