Mat矩阵点乘——A*B
Opencv重载了运算符“*”,姑且称之为Mat矩阵“点乘”,其中一个重载声明为:
CV_EXPORTS MatExpr operator * (const Mat& a, const Mat& b);
点乘说明:
1. A*B是以数学运算中矩阵相乘的方式实现的,即Mat矩阵A和B被当做纯粹的矩阵做乘法运算,这就要求A的列数等 于B的行数时,才能定义两个矩阵相乘。如A是m×n矩阵,B是n×p矩阵,它们的乘积AB是一个m×p矩阵。
如上图所示,C=AB。C中第i行第j列所在元素C(i,j)等于A中第i行所有元素跟B中第j列所有元素一一对应的乘积之和。
更具有代表性的的:对于A、B都是2行2列矩阵的情况:
Opencv验证:
定义两个Mat矩阵A和B点乘,A为2行3列,B为3行2列:
#include "core/core.hpp"
#include "iostream"
using namespace std;
using namespace cv;
int main(int argc,char *argv[])
{
Mat A=Mat::ones(
2,3,CV_32FC1);
Mat B=Mat::ones(
3,2,CV_32FC1);
Mat AB;
A.at<
float>(0,0)=1;
A.at<
float>(0,1)=2;
A.at<
float>(0,2)=3;
A.at<
float>(1,0