OpenCV 断言在矩阵乘法上失败

Posted

技术标签:

【中文标题】OpenCV 断言在矩阵乘法上失败【英文标题】:OpenCV Assertion failed on Matrix multiplication 【发布时间】:2013-06-07 09:54:20 【问题描述】:

我将两个矩阵与 OpenCV 相乘,A 为 NxM,B 为 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 && src1.channels() == dst.channels()) 在 cvMul,文件 /Users/Aziz/Documents/Projects/opencv_sources/trunk/modules/core/src/arithm.cpp, 第 2728 行

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

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

【问题讨论】:

我不想粗鲁,但该死!文档清楚地指出,矩阵必须相同大小,所以不要问为什么你的代码不工作。 【参考方案1】:

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

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

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

【讨论】:

以上是关于OpenCV 断言在矩阵乘法上失败的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 简单的二维矩阵乘法失败

大矩阵的Opencv乘法

opencv六通道矩阵乘法

OpenCV逐元素矩阵乘法

对OpenCV中3种乘法操作的理解掌握

OpenCV 中的矩阵乘法 - 结合 cv::Mat 和 cv::Scalar 对象