天天看點

容器之<Vec3b>一、What is vector?二、How do we use it ?

  • 一、What is vector?
  • 二、How do we use it ?

參考

一、What is vector?

vector(向量): C++中的一種資料結構,确切的說是一個類.它相當于一個動态的數組,當程式員無法知道自己需要的數組的規模多大時,用其來解決問題可以達到最大節約空間的目的.
           

用法:

1.檔案包含:

首先在程式開頭處加上#include以包含所需要的類檔案vector,還有一定要加上using namespace std;

2.聲明一個int向量以替代一維的數組:vector a;(等于聲明了一個int數組a[],大小沒有指定,可以動态的向裡面添加删除。

比如Vec<uchar, 3>:

其實這句就是定義一個uchar類型的數組,長度為3而已,例如 8U 類型的 RGB 彩色圖像可以使用 ,3 通道 float 類型的矩陣可以使用 。對于 Vec 對象,可以使用[]符号如操作數組般讀寫其元素,如:Vec3b color; //用 color 變量描述一種 RGB 顔色

color[0]=255; //0通道的B 分量

color[1]=0; //1通道的G 分量

color[2]=0; //2通道的R 分量

二、How do we use it ?

vv

先擴充一下通路像素的 .at 的用法:

cv::mat的成員函數: .at(int y, int x)可以用來存取圖像中對應坐标為(x,y)的元素坐标。但是在使用它時要注意,在編譯期必須要已知圖像的資料類型,這是因為cv::mat可以存放任意資料類型的元素。是以at方法的實作是用模闆函數來實作的。假設提前已知一幅圖像img的資料類型為 unsigned char型灰階圖(單通道),要對坐标為(14,25)的像素重新指派為25,則對應操作如下:

srcImage.at(14,25) = 25;

如果要操作的圖檔img是一幅資料類型同樣為unsigned char的彩色圖檔,再次要求将坐标(14,25)的像素指派為25。這個操作跟上面的就有點差別了,需要對這個像素三個通道的每個對應元素指派,Opencv中圖像三原色在記憶體中的排列順序為B-G-R(見下面注釋),操作過程如下:

img.at(14,25) [0]= 25;//B

img.at< Vec3b >(14,25) [1]= 25;//G

img.at< Vec3b >(14,25 [2]= 25;//R

繼續閱讀