天天看點

opencv中Mat類常用的一些操作總結

先後順序按照作者經常用的來寫:

一、cv::Mat類的建立方法或者一些建立需求:

  1. 最基礎的建立方式:

     

    cv::Mat image;

     這種建立方式适用于一些函數的輸出,因為一些函數會自動為其建構大小和類型;
  2. 當需要利用Mat建構矩陣去計算時候,往往需要去确定其大小以及參數類型:

     

    如下,建構了兩個個3行3列,參數為整數的矩陣a和b:

cv::Mat a(3,3,CV_8U);
cv::Mat b;
b.creat(3,3,CV_8U);
           
  1. 常有為了友善計算,會直接調用一個已知矩陣的情況,就需要在建立矩陣時候就對其進行指派的操作:

    如下,直接對一個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類的常用操作:

  1. 取矩陣中某個位置的值,也可以是取圖像中某點像素的灰階值:
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);
           
  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);
           
  1. 計算矩陣的點乘

    矩陣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;
           

先寫這些常用到的,其他想到了再補充!

繼續閱讀