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 断言在矩阵乘法上失败的主要内容,如果未能解决你的问题,请参考以下文章