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

本文详细介绍了OpenCV中三种矩阵乘法操作:向量乘法、数量乘法及.mul乘法,并提供了具体示例代码。向量乘法适用于矩阵结构为float类型且满足行列匹配的情况;数量乘法用于相同结构的多维向量;.mul则为逐元素乘法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考了《Opencv中Mat矩阵相乘——点乘、dot、mul运算详解 》“http://blog.youkuaiyun.com/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、可以看到,.这种乘法要求第一个矩阵的行值等于第二个矩阵的列值,而后两种乘法则要求参加运算的两个矩阵结构完全一样。
 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值