opencv - cvMulTransposed和输出矩阵的尺寸?

这可能看起来像是一个愚蠢的问题,但是我在乘法之后无法处理矩阵的输出大小..根据基本知识,如果矩阵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矩阵时,我可以在保存的文件中看到实际的乘数值。

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

干杯

最佳答案

这是函数的声明:

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

https://stackoverflow.com/questions/6765732/

相关文章:

opencv - 从照片中提取竞争对手号码

dll - OpenCV版本的有意混合

opencv - OpenCV和学生尺寸证明

objective-c - 将图像显示到 iPhone 模拟器屏幕

image-processing - 如何使用kinect和opencv进行面部检测?

python - 在OpenCV中如何在没有Sobel过滤器的情况下过滤线

opencv - 从大型数据集中识别被遮挡的纹理补丁

visual-studio - 尝试使用Visual Studio编译OpenCv文件时出现链接器错

python - 了解cvFilter2d的输出

opencv - OpenCV:检测图 block 中的运动