这可能看起来像一个愚蠢的问题,但我在乘法后遇到矩阵的输出大小问题...根据基础,如果矩阵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矩阵时,我可以在保存的文件中看到实际的相乘值。
这里,乘法后的输出矩阵不具有第一个矩阵的行和第二个矩阵的行吗?
干杯
答案 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