先后顺序按照作者经常用的来写:
一、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;
先写这些常用到的,其他想到了再补充!