![]() |
OpenCV 5.0.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のいずれか、またはこれらの型のうちのいずれかの値のタプル(タプル内のすべての値が同じ型)である。リストにある任意のプリミティブ型は、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でもこのように使われている)。