OpenCV  4.10.0
开源计算机视觉
正在加载...
正在搜索...
没有匹配项
cv::DataType< _Tp > 类模板参考

OpenCV 原生数据类型的模板“特性”类。 更多...

#include <opencv2/core/traits.hpp>

cv::DataType< _Tp > 的协作图

详细描述

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

OpenCV 原生数据类型的模板“特性”类。

注意
已弃用。这被“单用途”特性取代:traits::Type 和 traits::Depth

OpenCV 原生数据类型是无符号字符、布尔值、有符号字符、无符号短整型、有符号短整型、整型、浮点型、双精度浮点型之一,或者这些类型中的一种类型的元组,其中元组中的所有值都具有相同的类型。列表中的任何基本类型都可以由形式为 CV_<bit-depth>{U|S|F}C(<number_of_channels>) 的标识符定义,例如:uchar CV_8UC1、3 元素浮点型元组 CV_32FC3 等。能够存储此类原生数据类型单个实例的通用 OpenCV 结构是 Vec。此类类型的多个实例可以存储在 std::vector、MatMat_SparseMatSparseMat_ 或任何其他能够存储 Vec 实例的容器中。

The 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 是另一个辅助特性类
enum { depth = DataDepth<_Tp>::value, channels=2,
fmt=(channels-1)*256+DataDepth<_Tp>::fmt,
type=CV_MAKETYPE(depth, channels) };
};
...
@ value
定义 traits.hpp:289
@ fmt
定义 traits.hpp:290
OpenCV 原生数据类型的模板“特性”类。
定义 traits.hpp:113
#define CV_8U
定义 interface.h:73
unsigned char uchar
定义 interface.h:51
#define CV_MAKETYPE(depth, cn)
定义 interface.h:85

此类的主要目的是将编译时类型信息转换为 OpenCV 兼容的数据类型标识符,例如

// 分配一个 30x40 浮点型矩阵
// 以下语句将打印 6、2,即 depth == CV_64F,channels == 2
cout << B.depth() << ", " << B.channels() << endl;
从 Mat 派生的模板矩阵类。
定义 mat.hpp:2230
n 维密集数组类
定义 mat.hpp:812
int depth() const
返回矩阵元素的深度。
int channels() const
返回矩阵通道的数量。

因此,此类特性用于告诉 OpenCV 您正在使用哪种数据类型,即使这种类型不是 OpenCV 本地类型。例如,上面的矩阵 B 初始化能够编译是因为 OpenCV 定义了适当的专用模板类 DataType<complex<_Tp> >。这种机制对于通用算法实现也是有用的(并且 OpenCV 以这种方式使用它)。

注意
已删除默认值,以防止开发人员对使用不支持的类型感到困惑(参见 #7599)

此类的文档是从以下文件生成的