OpenCV(模板类 cv::Vec<T, cn>)
cv::Vec<T, cn>
是 OpenCV 中的一个模板类,用于表示固定长度的向量,常用于图像处理和计算机视觉中的坐标、颜色、法线等数据的存储。T
表示元素的类型,cn
表示向量的维度(或通道数)。
1. 模板参数
T
:向量元素的类型,比如float
,int
,uchar
等。cn
:向量的维度,即元素的数量。例如cv::Vec<int, 3>
表示一个包含 3 个int
类型元素的向量。
2. 常见的类型别名
OpenCV 提供了一些常见向量类型的别名。例如:
cv::Vec2b
:表示cv::Vec<uchar, 2>
,即 2 个uchar
类型的元素。cv::Vec3b
:表示cv::Vec<uchar, 3>
,常用于存储图像中的 RGB/BGR 颜色。cv::Vec4b
:表示cv::Vec<uchar, 4>
,常用于存储带有 Alpha 通道的 RGBA/BGRA 颜色。cv::Vec2f
:表示cv::Vec<float, 2>
,常用于存储二维坐标或二维向量。cv::Vec3f
:表示cv::Vec<float, 3>
,常用于存储三维坐标或三维向量。cv::Vec4f
:表示cv::Vec<float, 4>
。
3. 基本特性
- 存储固定长度的向量数据:可以使用
[]
访问和修改向量的元素。 - 提供了简单的操作:可以进行加减法、点乘、叉乘、归一化等运算。
- 静态长度:向量的长度是编译时确定的,因此比动态长度的向量(如
std::vector
)更高效,尤其在需要大量小向量的场景中。
4. 示例
- 定义与初始化:
cv::Vec3f v1(1.0f, 2.0f, 3.0f); // 三个 float 元素的向量
cv::Vec4b color(255, 128, 64, 255); // 表示带 alpha 通道的 RGBA 颜色
- 访问与修改元素:
v1[0] = 0.5f; // 修改向量的第一个元素
float x = v1[0]; // 读取向量的第一个元素
uchar alpha = color[3]; // 读取 alpha 通道的值
- 向量运算:
cv::Vec3f v2(0.0f, 1.0f, 2.0f);
cv::Vec3f sum = v1 + v2; // 向量加法
float dotProduct = v1.dot(v2); // 点乘
cv::Vec3f crossProduct = v1.cross(v2); // 叉乘(仅对 3 维向量有效)
- 应用场景:
- 颜色表示:
cv::Vec3b
用于表示图像中每个像素的 BGR 颜色值。 - 坐标表示:
cv::Vec2f
或cv::Vec3f
用于表示二维或三维坐标。 - 几何处理:向量可以用于法线、速度、加速度等几何属性的表示和运算。
- 颜色表示:
总结
cv::Vec<T, cn>
是一个高效的、编译时确定长度的向量模板类,广泛用于 OpenCV 的各种功能中。它支持基本的向量运算和元素访问,并提供了常见向量类型的别名,方便用户在图像处理和计算机视觉中进行颜色、坐标等数据的存储与计算。