1. 程式人生 > >對OpenCV中3種乘法操作的理解掌握

對OpenCV中3種乘法操作的理解掌握

alt 函數 opencv 如果 csdn tle 基本操作 art sca

參考了《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,0)=4;
A.at<float>(1,1)=5;
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 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,0)=4;
A.at<float>(1,1)=5;
A.at<float>(1,2)=6;
Mat AB = A*B;
//
Mat C = Mat(3,3,CV_32FC1,Scalar(0));
C = A.clone();
Mat AC = A.mul(C);


技術分享
四、小結1、以上三種函數,都是以Mat作為輸入參數和輸出結果的;2、. 這種乘法要求兩個矩陣都是float結果,後兩者只要求兩個矩陣的結果是一樣的;3、可以看到,.這種乘法要求第一個矩陣的行值等於第二個矩陣的列值,而後兩種乘法則要求參加運算的兩個矩陣結構完全一樣。


來自為知筆記(Wiz)

對OpenCV中3種乘法操作的理解掌握