OpenCV 4.12.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 原始数据类型是 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 是另一个辅助特征类
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
CV_8U
#define CV_8U
I.at<uchar>(y, x) = saturate_cast<uchar>(r);
uchar
unsigned char uchar
CV_MAKETYPE
#define CV_MAKETYPE(depth, cn)

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

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

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

注意
默认值已删除,以避免让开发人员对使用不受支持的类型感到困惑(请参阅#7599)

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