參考了《Opencv中Mat矩陣相乘——點乘、dot、mul運算詳解 》“http://blog.csdn.net/dcrmg/article/details/52404580”的相關内容。
乘法是線性代數的基本操作,在OpenCV中有三種方法實作了乘法。
一、向量乘法

這兩幅圖像說明的就是向量乘法。在OpenCV中采用" . "來實作,要求是第一個矩陣的列值等于第二個矩陣的行值。且每個矩陣都是float結構。
Mat A = Mat(3,3,CV_32FC1,Scalar(0));
Vec3f v (1,2,3);
Mat B = Mat(v);
A.at<float>(0,0)=1;
A.at<float>(0,1)=2;
A.at<float>(0,2)=3;
A.at<float>(1,0)=4;
A.at<float>(1,1)=5;
A.at<float>(1,2)=6;
A.at<float>(1,2)=6;
Mat AB = A*B;
二、數量乘法
對于輸入的矩陣
和
數量乘法的結果為
那麼可以看出來,這裡要求a和b的向量結構是一樣的,在OpenCV中,如果a和b是多元向量的話,那麼首先是将其拉長為一維向量,然後做乘法。
Mat A=Mat::ones(2,3,CV_8UC1);
Mat B=Mat::ones(2,3,CV_8UC1);
A.at<uchar>(0,0)=1;
A.at<uchar>(0,1)=2;
A.at<uchar>(0,2)=3;
A.at<uchar>(1,0)=4;
A.at<uchar>(1,1)=5;
A.at<uchar>(1,2)=6;
B.at<uchar>(0,0)=1;
B.at<uchar>(0,1)=2;
B.at<uchar>(0,2)=3;
B.at<uchar>(1,0)=4;
B.at<uchar>(1,1)=5;
B.at<uchar>(1,2)=6;
double AB=A.dot(B);
三、乘法
最後介紹.mul這種乘法。這種乘法就是直接了解意義上的乘法。對于
乘法的結果為
參考代碼
Mat A = Mat(3,3,CV_32FC1,Scalar(0));
//
Mat C = Mat(3,3,CV_32FC1,Scalar(0));
C = A.clone();
Mat AC = A.mul(C);
四、小結
1、以上三種函數,都是以Mat作為輸入參數和輸出結果的;
2、. 這種乘法要求兩個矩陣都是float結果,後兩者隻要求兩個矩陣的結果是一樣的;
3、可以看到,.這種乘法要求第一個矩陣的行值等于第二個矩陣的列值,而後兩種乘法則要求參加運算的兩個矩陣結構完全一樣。
來自為知筆記(Wiz)目前方向:圖像拼接融合、圖像識别
聯系方式:[email protected]