opencv矩陣元素資料型別總結

2021-09-11 08:35:39 字數 3249 閱讀 2369

**:

在以下兩個場景中使用 opencv 時,我們必須事先知道矩陣元素的資料型別:

但面對一大堆**,我們有時並不清楚當前的矩陣元素究竟是什麼型別,這篇文章就是以cv::mat類為例來解決這個問題。

cv::mat 類的物件有乙個成員函式type()用來返回矩陣元素的資料型別,返回值是int型別,不同的返回值代表不同的型別。opencv reference manual 中對type()的解釋如下所示:

mat::type

c++: int mat::type() const

the method returns a matrix element type. this is an identifier compatible with the cvmat type system, like cv_16sc3 or 16-bit signed 3-channel array, and so on.

實際的**如下所示:

cv::mat haha = cv::mat::zeros(3,3,cv_64f);

int hahatype = haha.type();

std::cout<<"hahatype = "《至此,知道了type()函式,下一步更關鍵的就是返回值和具體型別之間的對應關係了。文章《list of mat type in opencv》對此整理得非常清楚,具體如下表所示:

c1c2

c3c4

cv_8u08

1624

cv_8s19

1725

cv_16u210

1826

cv_16s311

1927

cv_32s412

2028

cv_32f513

2129

cv_64f614

2230

表頭的 c1, c2, c3, c4 指的是通道(channel)數,比如灰度影象只有 1 個通道,是 c1;jpeg格式 的 rgb 彩色影象就是 3 個通道,是 c3;png 格式的彩色影象除了 rgb 3個通道外,還有乙個透明度通道,所以是 c4。大家還會發現 7 怎麼沒有被定義型別,這個可以看 opencv 原始碼,有如下所示的一行,說明 7 是用來給使用者自定義的:

#define cv_usrtype1 7

如果僅僅是為了在數值計算前明確資料型別,那麼看到這裡就可以了;如果是要使用at方法訪問資料元素,那麼還需要下面一步。因為以單通道為例,at方法接受的是uchar這樣的資料型別,而非cv_8u。在已知通道數和每個通道資料型別的情況下,指定給at方法的資料型別如下表所示:

c1c2

c3c4

c6uchar

ucharcv::vec2bcv::vec3bcv::vec4b

short

shortcv::vec2scv::vec3scv::vec4s

intintcv::vec2icv::vec3icv::vec4i

float

floatcv::vec2fcv::vec3fcv::vec4fcv::vec6f

double

doublecv::vec2dcv::vec3dcv::vec4dcv::vec6d

至此,我們就可以像《

opencv for matlab users (2)

》中演示的一樣採用如下方式訪問影象(矩陣)了

cv::vec3b vec3b = img.at(0,0);

uchar vec3b0 = img.at(0,0)[0];

uchar vec3b1 = img.at(0,0)[1];

uchar vec3b2 = img.at(0,0)[2];

std::cout<<"vec3b = "《資料型別及其取值範圍

數值具體型別

取值範圍

cv_8u

8 位無符號整數

(0…..255)

cv_8s

8 位符號整數

(-128…..127)

cv_16u

16 位無符號整數

(0……65535)

cv_16s

16 位符號整數

(-32768…..32767)

cv_32s

32 位符號整數

(-2147483648……2147483647)

cv_32f

32 位浮點數

(-flt_max ………flt_max,inf,nan)

cv_64f

64 位浮點數

(-dbl_max ……….dbl_max,inf,nan)

vec 類的定義:

templateclass vec : public matx<_tp, n, 1> ;

typedef vecvec2b;

typedef vecvec3b;

typedef vecvec4b;

typedef vecvec2s;

typedef vecvec3s;

typedef vecvec4s;

typedef vecvec2i;

typedef vecvec3i;

typedef vecvec4i;

typedef vecvec2f;

typedef vecvec3f;

typedef vecvec4f;

typedef vecvec6f;

typedef vecvec2d;

typedef vecvec3d;

typedef vecvec4d;

typedef vecvec6d;

確定 OpenCV 矩陣元素的資料型別

在以下兩個場景中使用 opencv 時,我們必須事先知道矩陣元素的資料型別 但面對一大堆 我們有時並不清楚當前的矩陣元素究竟是什麼型別,這篇文章就是以cv mat類為例來解決這個問題。cv mat 類的物件有乙個成員函式type 用來返回矩陣元素的資料型別,返回值是int型別,不同的返回值代表不同的...

OpenCV畫素資料型別

1 unsigned 8bits 注 一般影象結構引數 mat資料結構引數 cv 8uc1,cv 8uc2,cv 8uc3,cv 8uc4 變數型別 空間大小 範圍uchar 8bits 0 255 unsigned char 8bits 0 255 2 signed 8bits mat資料結構引數...

確定opencv矩陣元素型別

在以下兩個場景中使用 opencv 時,我們必須事先知道矩陣元素的資料型別 但面對一大堆 我們有時並不清楚當前的矩陣元素究竟是什麼型別,這篇文章就是以cv mat類為例來解決這個問題。cv mat 類的物件有乙個成員函式type 用來返回矩陣元素的資料型別,返回值是int型別,不同的返回值代表不同的...