4章画像と大型配列型

4.1 動的可変長ストレージ

私たちの旅の次の滞在先は大型配列型です。この中で最も上位の概念はcv::Matであり、これはOpenCVライブラリのC++実装全体において中心的な役割を果たしています。OpenCVライブラリの関数の大多数はcv::Matクラスのメンバー関数であるか、引数としてcv::Matを取ったり戻り値としてcv::Matを返したりします。そして多くの関数が、それらのすべてに当てはまる動作をします。

cv::Matクラスを使えば、任意の次元数の密な配列を表現することができます。ここでの「密」とは、配列内のすべての要素に対して、その要素に対応するメモリ上のデータ値が(その要素の値がゼロであったとしても)存在することを意味します。例えば、ほとんどの画像データは密な配列として保存されます。これに対し、疎な配列(スパース配列)も存在します。疎な配列では通常、ゼロ以外の要素だけが格納されます。この方法は、要素の多くが実際にゼロであった場合は保存領域を大幅に節約できますが、配列のゼロの要素が比較的少ない場合は逆に無駄になってしまう可能性があります。密ではなく疎な配列を使用するケースで一般的なのがヒストグラムです。ヒストグラムは大半の要素がゼロであることが多く、それらのゼロの要素をすべて保持する必要はありません。そのような疎な配列に対し、OpenCVには専用のデータ構造cv::SparseMatが用意されています。

[注記]

みなさんがOpenCVライブラリのC言語インタフェース(バージョン2.1以前の実装)に慣れていらっしゃるのであれば、データ型 ...

Get 詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.