码迷,mamicode.com
首页 > 其他好文 > 详细

opencv计算矩阵与数值的乘积,矩阵与矩阵的乘积

时间:2014-07-16 17:22:38      阅读:433      评论:0      收藏:0      [点我收藏+]

标签:mat   矩阵 常量 乘积   矩阵与矩阵的乘积   

1、矩阵与数值的乘积

在进行数组与一个常量相乘的运算时,使用了Mat类中的mul函数。

//! per-element matrix multiplication by means of matrix expressions
MatExpr mul(InputArray m, double scale=1) const;

使用后,发现数据有些异常,于是就打印出每一个计算后的数值,

发现原来该函数是将,m中矩阵每个元素先做二次方运算,再与scale相乘,于是放弃用该函数,改用

//! computes element-wise weighted product of the two arrays (dst = scale*src1*src2)
CV_EXPORTS_W void multiply(InputArray src1, InputArray src2,
                           OutputArray dst, double scale=1, int dtype=-1);

在使用时,先设置

Mat src2 = Mat::ones(src1.rows, src1.cols, src1.type()); 

然后再进行src1与scale的相乘运算:

multiply(src1, src2, IResult, scale);


2、矩阵与矩阵的乘积

C(m*k) = A(m*n) * B(n*k)

计算上述运算时,就不能用

<pre name="code" class="cpp">multiply(src1, src2, IResult, scale);

这个函数来计算了,因为这个函数只适用于计算两个大小相同的矩阵的对应点的乘积。

所以采用gemm()函数来计算:

//! implements generalized matrix product algorithm GEMM from BLAS
CV_EXPORTS_W void gemm(InputArray src1, InputArray src2, double alpha,
                       InputArray src3, double gamma, OutputArray dst, int flags=0);

使用时注意flags的含义:默认是0,表示输入的矩阵都不转置。

dst = alpha* src1 *src2 + gamma* src3

如果要对某个输入的矩阵进行转置,可进行如下设置:

flags –

operation flags:

GEMM_1_T transposes src1.

GEMM_2_T transposes src2.

GEMM_3_T transposes src3.


opencv计算矩阵与数值的乘积,矩阵与矩阵的乘积,布布扣,bubuko.com

opencv计算矩阵与数值的乘积,矩阵与矩阵的乘积

标签:mat   矩阵 常量 乘积   矩阵与矩阵的乘积   

原文地址:http://blog.csdn.net/wsbeibei/article/details/37809445

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!