cvMulTransposed和输出矩阵的尺寸?

时间:2011-07-20 17:09:21

标签: opencv

这可能看起来像一个愚蠢的问题,但我在乘法后遇到矩阵的输出大小问题...根据基础,如果矩阵A有m * n而矩阵B是J * k ..那么他们的产品将是大小m * k ..

所以根据我的代码如下:

CvMat *meh, *meh2;
    meh = cvCreateMat(2, 9, CV_32FC1);
    meh2 = cvCreateMat(2, 2, CV_32FC1);
    cvMulTransposed(meh, meh2, 1);
    cvSave( "meh.txt", meh2 );
meh是一个2行,9列矩阵,所以它的转置是9行2列矩阵吗?并且它们的乘法将给出2行2列矩阵(2 * 9乘以9 * 2)。

这就是我创建的输出矩阵,meh2 ..这是输出保存到文本:

   %YAML:1.0
meh: !!opencv-matrix
   rows: 2
   cols: 2
   dt: f
   data: [ -431602080., -431602080., -431602080., -431602080. ]

可以看出它充满了垃圾值..

但是当我更改代码以使输出为9 * 9矩阵时,我可以在保存的文件中看到实际的相乘值。

这里,乘法后的输出矩阵不具有第一个矩阵的行和第二个矩阵的行吗?

干杯

1 个答案:

答案 0 :(得分:0)

这是函数的声明:

void cvMulTransposed(const CvArr* src, CvArr* dst, int order, const CvArr* delta=NULL, double scale=1.0)

你使用order = 1,那么它意味着乘法就像这样:

dst = scale* transpose[(src-delta)] * (src-delta)

如果使用0阶,则乘法为:

dst = scale* (src-delta) * transpose[(src-delta)]

在您使用order = 1的情况下,最终矩阵为:

  (9,2)     x     (2,9)       =    (9,9)
 transpose     not transpose       result

This is where you can get the documentation of the function