cv::mat mat_rown_colm = cv::mat (rown, colm, type);
type:cv_c
cv::mat mat_rown_colm = cv::mat (rown, colm, cv_c1);
元素的訪問方式:位置or迭代器。
直接訪問:模板函式at<>(),先將at<>()特化到矩陣所包含的資料型別,然後再通過資料的行、列進行元素的訪問。
對於單通道:
cv::mat m23 = cv::mat(2,3,32fc1);
m23.at(row, col);
對於多通道:
cv::mat m23 = cv::mat(2,3,32fc3);
m23.at(row,col)[channel];
如果採用單通道的訪問方式,將會依次訪問元素i的1、2、3通道,比如:
m23.at(0,0) //第1個元素的第1個通道c1
m23.at(0,1) //第1個元素的第2個通道c2
m23.at(0,2) //第1個元素的第3個通道c3
m23.at(0,3) //第2個元素的第1個通道c1
對於多通道使用模板結構:簡化介面
cv::mat_m23(2, 3);
m23.at(x, y) = cv::vec3f(a, b, c);
陣列中的資料是按行連續組織的,不能直接訪問乙個特定的列:訪問二維陣列,可以用指標來指定某一行,再找到對應的列元素
模板函式ptr<>()
例子1:(給定乙個float單通道的矩陣mtx)
cv::mat mtx23= cv::mat::ones(2, 3, cv_32fc1);
//data0是矩陣第1行的指標
float *data0 = mtx23.ptr(0);
//data1是矩陣第2行的指標
float *data1 = mtx23.ptr(1);
例子2:(給定乙個float三通道的矩陣mtx)
cv::mat mtx23 = cv::mat::zeros(2, 3, cv_32fc3);
//data1是矩陣第1行的指標
vec3f *data1 = mtx23.ptr(0);
//訪問第1行第1個元素的三個通道
(*data1)[0] = 0;
(*data1)[1] = 1;
(*data1)[2] = 2;
//訪問第1行第2個元素的三個通道
(*(data1 + 1))[0] = 3;
(*(data1 + 1))[1] = 4;
(*(data1 + 1))[2] = 5;
//data2是矩陣第2行的指標
vec3f *data2 = mtx23.ptr(1);
//訪問第2行第1個元素的三個通道
(*data2 )[0] = 0;
(*data2 )[1] = 1;
(*data2 )[2] = 2;
//訪問第2行第2個元素的三個通道
(*(data2 + 1))[0] = 3;
(*(data2 + 1))[1] = 4;
(*(data2 + 1))[2] = 5;
OpenCV Mat資料型別構造
mat 的大致的資料結構可以理解為 row col 規模的矩陣,矩陣中的每個元素,是規格統一但不確定的資料元,統稱為scalar,而scalar的格式大致為 a b,c,d 這樣的向量或者標量,向量的長度有時可以被理解為通道數,資料的具體型別有時可以被理解為深度,即該數占用多少位元來完成描述。mat...
OpenCV Mat和IplImage的轉換
iplimage是opencv1裡面用於儲存影象的資料結構,到了opencv2裡面,這一結構被更方便易用的mat型別取代。然而,在實際中,很多以前的opencv 用的都是iplimage,因此進行mat和iplimage的相互轉換經常被用到,下面利用 實現兩者間的相互轉換。mat matimg ip...
OpenCV Mat和IplImage的轉換
iplimage是opencv1裡面用於儲存影象的資料結構,到了opencv2裡面,這一結構被更方便易用的mat型別取代。然而,在實際中,很多以前的opencv 用的都是iplimage,因此進行mat和iplimage的相互轉換經常被用到,下面利用 實現兩者間的相互轉換。mat matimg ip...