![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
OpenCVのプリミティブデータ型のためのテンプレート「トレイト」クラス。 続きを読む...
#include <opencv2/core/traits.hpp>
OpenCVのプリミティブデータ型のためのテンプレート「トレイト」クラス。
OpenCVのプリミティブデータ型は、unsigned char, bool, signed char, unsigned short, signed short, int, float, double のいずれか、またはこれらの型のうちの1つの値からなるタプル(タプル内のすべての値が同じ型)のいずれかである。リスト中の任意のプリミティブ型は、CV_<bit-depth>{U|S|F}C(<number_of_channels>) という形式の識別子で定義できる。例: uchar は CV_8UC1、3要素の浮動小数点タプルは CV_32FC3、などである。このようなプリミティブデータ型の単一のインスタンスを格納できる汎用のOpenCV構造体が Vec である。このような型の複数のインスタンスは、std::vector、Mat、Mat_、SparseMat、SparseMat_、または Vec インスタンスを格納できる任意の他のコンテナに格納できる。
DataType クラスは基本的に、対応するクラスにフィールドやメソッドを追加することなく、このようなプリミティブデータ型の記述を提供するために使用される(実際、プリミティブなC/C++データ型に何かを追加することは不可能である)。この手法はC++ではクラストレイトとして知られている。使用されるのは DataType 自体ではなく、次のような特殊化されたバージョンである:
このクラスの主な目的は、コンパイル時の型情報をOpenCV互換のデータ型識別子に変換することである。例:
このように、このようなトレイトは、たとえOpenCVにとってネイティブでない型であっても、どのデータ型を扱っているかをOpenCVに伝えるために使用される。例えば、上記の行列Bの初期化がコンパイルできるのは、OpenCVが適切な特殊化テンプレートクラス DataType<complex<_Tp> > を定義しているからである。この仕組みは、汎用アルゴリズムの実装にも役立つ(OpenCVでもこのように使われている)。