ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

对OpenCV中3种乘法操作的理解掌握

2022-07-19 13:03:08  阅读:206  来源: 互联网

标签:Mat 掌握 矩阵 OpenCV CV 向量 乘法


参考了《Opencv中Mat矩阵相乘——点乘、dot、mul运算详解 》“http://blog.csdn.net/dcrmg/article/details/52404580”的相关内容。

乘法是线性代数的基本操作,在OpenCV中有三种方法实现了乘法。

一、向量乘法

image

image

这两幅图像说明的就是向量乘法。在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;

image

二、数量乘法

对于输入的矩阵

image

image

数量乘法的结果为

image

那么可以看出来,这里要求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这种乘法。这种乘法就是直接理解意义上的乘法。对于

image

乘法的结果为

image

参考代码

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

image

四、小结

1、以上三种函数,都是以Mat作为输入参数和输出结果的;

2、. 这种乘法要求两个矩阵都是float结果,后两者只要求两个矩阵的结果是一样的;

3、可以看到,.这种乘法要求第一个矩阵的行值等于第二个矩阵的列值,而后两种乘法则要求参加运算的两个矩阵结构完全一样。

标签:Mat,掌握,矩阵,OpenCV,CV,向量,乘法
来源: https://www.cnblogs.com/jsxyhelu/p/16493681.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有