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. 示例

  1. 定义与初始化
cv::Vec3f v1(1.0f, 2.0f, 3.0f); // 三个 float 元素的向量
cv::Vec4b color(255, 128, 64, 255); // 表示带 alpha 通道的 RGBA 颜色
  1. 访问与修改元素
v1[0] = 0.5f;  // 修改向量的第一个元素
float x = v1[0];  // 读取向量的第一个元素
uchar alpha = color[3];  // 读取 alpha 通道的值
  1. 向量运算
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 维向量有效)
  1. 应用场景
    • 颜色表示cv::Vec3b 用于表示图像中每个像素的 BGR 颜色值。
    • 坐标表示cv::Vec2fcv::Vec3f 用于表示二维或三维坐标。
    • 几何处理:向量可以用于法线、速度、加速度等几何属性的表示和运算。


总结

cv::Vec<T, cn> 是一个高效的、编译时确定长度的向量模板类,广泛用于 OpenCV 的各种功能中。它支持基本的向量运算和元素访问,并提供了常见向量类型的别名,方便用户在图像处理和计算机视觉中进行颜色、坐标等数据的存储与计算。



posted @ 2024-09-03 15:09  做梦当财神  阅读(27)  评论(0编辑  收藏  举报