天天看点

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;
           

先写这些常用到的,其他想到了再补充!

继续阅读