Matrix乘法中的OpenCV断言失败

时间:2013-06-07 09:54:20

标签: c++ ios c opencv matrix-multiplication

我将两个矩阵与OpenCV相乘,A在NxM中,A是MxP。

根据documentation

  

所有阵列必须具有相同的类型和相同的大小(或ROI   尺寸)。对于范围有限的类型,此操作是饱和的。

但是,theory of matrix multiplication

  

假设两个矩阵相乘(对任何矩阵的推广)   号码将在下面讨论)。如果A是n×m矩阵而B是m×p   矩阵,结果将是它们的乘法的AB是定义的n×p矩阵   只有当A中的列数m等于行数m时   在B。

这个代码不应该起作用吗?

- (CvMat *) multMatrix:(CvMat *)AMatrix BMatrix:(CvMat *)BMatrix 
{
  CvMat *result = cvCreateMat(AMatrix->rows, BMatrix->cols, kMatrixType);
  cvMul(AMatrix, BMatrix, result, 1.0);
  return result;
}

我得到以下异常:

  

OpenCV错误:断言失败(src1.size == dst.size&&   cvMul文件中的src1.channels()== dst.channels())   /Users/Aziz/Documents/Projects/opencv_sources/trunk/modules/core/src/arithm.cpp,   第2728行

kMatrixType是CV_32F,A是6x234,B是234x5,结果是6x5 ......

我做错了吗?或者这是对矩阵乘法的OpenCV限制吗?

1 个答案:

答案 0 :(得分:3)

您正在使用cvMul进行元素乘法。

您应该查看cvMatMul进行正确的矩阵乘法。

http://opencv.willowgarage.com/wiki/Matrix_operations