OpenCV(模板類 cv::Vec<T, cn>)

做梦当财神發表於2024-09-03

目錄
  • 1. 模板引數
  • 2. 常見的型別別名
  • 3. 基本特性
  • 4. 示例
  • 總結



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 的各種功能中。它支援基本的向量運算和元素訪問,並提供了常見向量型別的別名,方便使用者在影像處理和計算機視覺中進行顏色、座標等資料的儲存與計算。



相關文章