OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
cv::DataType< _Tp > クラステンプレート

OpenCVのプリミティブデータ型のためのテンプレート「トレイト」クラス。 続きを読む...

#include <opencv2/core/traits.hpp>

Collaboration diagram for cv::DataType< _Tp >:

詳細説明

template<typename _Tp>
class cv::DataType< _Tp >

OpenCVのプリミティブデータ型のためのテンプレート「トレイト」クラス。

覚え書き
非推奨。これは「単一目的」のトレイト traits::Type と traits::Depth に置き換えられた

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、MatMat_SparseMatSparseMat_、またはVecインスタンスを格納できるその他の任意のコンテナに格納できる。

DataType クラスは基本的に、対応するクラスにフィールドやメソッドを追加することなく、このようなプリミティブデータ型の記述を提供するために使用される(実際、プリミティブなC/C++データ型に何かを追加することは不可能である)。この手法はC++ではクラストレイトとして知られている。使用されるのは DataType 自体ではなく、次のような特殊化されたバージョンである:

template<> class DataType<uchar>
{
typedef uchar value_type;
typedef int work_type;
typedef uchar channel_type;
enum { channel_type = CV_8U, channels = 1, fmt='u', type = CV_8U };
};
...
template<typename _Tp> DataType<std::complex<_Tp> >
{
typedef std::complex<_Tp> value_type;
typedef std::complex<_Tp> work_type;
typedef _Tp channel_type;
// DataDepth is another helper trait class
enum { depth = DataDepth<_Tp>::value, channels=2,
fmt=(channels-1)*256+DataDepth<_Tp>::fmt,
type=CV_MAKETYPE(depth, channels) };
};
...
@ value
Definition traits.hpp:349
@ fmt
Definition traits.hpp:350
Template "trait" class for OpenCV primitive data types.
Definition traits.hpp:113
uint8_t uchar
Definition interface.h:35
#define CV_8U
Definition interface.h:54
#define CV_MAKETYPE(depth, cn)
Definition interface.h:74

このクラスの主な目的は、コンパイル時の型情報をOpenCV互換のデータ型識別子に変換することである。例:

// allocates a 30x40 floating-point matrix
// the statement below will print 6, 2 , that is depth == CV_64F, channels == 2
cout << B.depth() << ", " << B.channels() << endl;
Template matrix class derived from Mat.
Definition mat.hpp:2581
Comma-separated Matrix Initializer.
Definition mat.hpp:964
int depth() const
Returns the depth of a matrix element.
int channels() const
Returns the number of matrix channels.

このように、このようなトレイトは、たとえOpenCVにとってネイティブでない型であっても、どのデータ型を扱っているかをOpenCVに伝えるために使用される。例えば、上記の行列Bの初期化がコンパイルできるのは、OpenCVが適切な特殊化テンプレートクラス DataType<complex<_Tp> > を定義しているからである。この仕組みは、汎用アルゴリズムの実装にも役立つ(OpenCVでもこのように使われている)。

覚え書き
サポートされていない型の使用に関する開発者の混乱を防ぐため、デフォルト値は削除された(#7599 を参照)

このクラス詳解は次のファイルから抽出されました: