天天看點

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

參考了《Opencv中Mat矩陣相乘——點乘、dot、mul運算詳解 》“http://blog.csdn.net/dcrmg/article/details/52404580”的相關内容。

乘法是線性代數的基本操作,在OpenCV中有三種方法實作了乘法。

一、向量乘法

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

這兩幅圖像說明的就是向量乘法。在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;

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

二、數量乘法

對于輸入的矩陣

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

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

數量乘法的結果為

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

那麼可以看出來,這裡要求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這種乘法。這種乘法就是直接了解意義上的乘法。對于

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

乘法的結果為

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

參考代碼

    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);

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

四、小結

1、以上三種函數,都是以Mat作為輸入參數和輸出結果的;

2、. 這種乘法要求兩個矩陣都是float結果,後兩者隻要求兩個矩陣的結果是一樣的;

3、可以看到,.這種乘法要求第一個矩陣的行值等于第二個矩陣的列值,而後兩種乘法則要求參加運算的兩個矩陣結構完全一樣。

來自為知筆記(Wiz)

目前方向:圖像拼接融合、圖像識别

聯系方式:[email protected]

繼續閱讀