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