执行广义矩阵乘法,代表的是GEneralized Matrix Multiplication,cvGEMM()可以处理线性代数方面许多的乘法运算!
double cvGEMM(//矩阵的广义乘法运算 const CvArr* src1,//乘数矩阵 const CvArr* src2,//乘数矩阵 double alpha,//1号(src1)矩阵系数 const CvArr* src3,//加权矩阵 double beta,//src3矩阵系数 CvArr* dst,//结果矩阵 int tABC = 0//变换标记 );tABC变换标记及其对应的含义
GEMM_1_T transposes src1.(转置src1)
GEMM_2_T transposes src2. (转置src2)
GEMM_3_T transposes src3. (转置src3)
函数对应的乘法运算公式为:dst = (alpha*src1)xsrc2+(beta*src3)
<span style="font-size:18px;"><span style="font-size:18px;">/*------------这段代码主要是cvGEMM的一个简单demo--------------*/
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
double a[3][3]=
{
{1,0,0},
{0,2,0},
{0,0,3}
};
CvMat va=cvMat(3,3, CV_64FC1,a);
cout<<"目标矩阵1:"<<endl;
for(int i=0;i<3;i++)
{
for (int j = 0; j < 3; j++)
{
cout<<cvmGet(&va,i,j);
}
cout<<endl;
}
double b[3][3]=
{
{1,1,1},
{1,1,1},
{1,1,1}
};
CvMat vb=cvMat(3,3,CV_64FC1,b);
cout<<"目标矩阵2:"<<endl;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
cout<<cvmGet(&vb,i,j);
}
cout<<endl;
}
double c[3][3]=
{
{0,0,0},
{0,0,0},
{0,0,0}
};
CvMat vc=cvMat(3,3,CV_64FC1,c);
cvGEMM(//矩阵的广义乘法运算
&va,//输入矩阵
&vb,//第二个输入矩阵
1,//1号矩阵的系数
&vc,//加权矩阵
4,//第三个矩阵的权值,不知道有什么用
&vc//结果矩阵
);
cout << "结果矩阵:"<< endl;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cout<<cvmGet(&vc,i,j);
}
cout << endl;
}
getchar();
return 0;
}</span></span>
代码运行结果:
参考:http://www.tuicool.com/articles/Q3mM3m