先後順序按照作者經常用的來寫:
一、cv::Mat類的建立方法或者一些建立需求:
-
最基礎的建立方式:
這種建立方式适用于一些函數的輸出,因為一些函數會自動為其建構大小和類型;cv::Mat image;
-
當需要利用Mat建構矩陣去計算時候,往往需要去确定其大小以及參數類型:
如下,建構了兩個個3行3列,參數為整數的矩陣a和b:
cv::Mat a(3,3,CV_8U);
cv::Mat b;
b.creat(3,3,CV_8U);
-
常有為了友善計算,會直接調用一個已知矩陣的情況,就需要在建立矩陣時候就對其進行指派的操作:
如下,直接對一個3行3列的矩陣進行指派:
cv::Mat c = (Mat_<double>(3,3)<<0.111,0.222,0.333,0.444,0.555,0.666,0.777,0.888,0.999);
注:對于一些opencv函數的參數,有特殊的格式要求,這裡需要注意一下格式的選擇。
二、cv::Mat類的常用操作:
- 取矩陣中某個位置的值,也可以是取圖像中某點像素的灰階值:
cv::Mat c = (Mat_<double>(3,3)<<0.111,0.222,0.333,0.444,0.555,0.666,0.777,0.888,0.999);
//取矩陣c中(1,1)點處的值,此處類型要注意與Mat中一緻
float result = c.at<double>(1,1);
-
計算矩陣的平均值,這裡需要用到一個opencv函數
Scalar mean(InputArray src, InputArray mask = noArray());
這個函數傳回的Scalar類型是一個1行4列的數組,對于輸入的Mat是單通道的情況,我們取Scalar的第一位就是平均值,代碼如下:
cv::Mat c = (Mat_<double>(3,3)<<0.111,0.222,0.333,0.444,0.555,0.666,0.777,0.888,0.999);
Scalar_<double> x = mean(c);
double ave = x(0);
-
計算矩陣的點乘
矩陣A、B、C,C是AB的點乘,代碼中表示為:
cv::Mat A(3,3,CV_8U);
cv::Mat B(3,1,CV_8U);
cv::Mat C(1,3,CV_8U);
A = B*C;
先寫這些常用到的,其他想到了再補充!