OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.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 のいずれか、またはこれらの型のうちの1つの値からなるタプル(タプル内のすべての値が同じ型)のいずれかである。リスト中の任意のプリミティブ型は、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:289
@ fmt
Definition traits.hpp:290
Template "trait" class for OpenCV primitive data types.
Definition traits.hpp:113
#define CV_8U
Definition interface.h:73
unsigned char uchar
Definition interface.h:51
#define CV_MAKETYPE(depth, cn)
Definition interface.h:85

このクラスの主な目的は、コンパイル時の型情報を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:2296
n-dimensional dense array class
Definition mat.hpp:840
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 を参照)

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