OpenCV中的矩阵乘法

时间:2012-06-07 16:39:11

标签: opencv

我在OpenCV中有两个Mat图像:

Mat ft = Mat::zeros(src.rows,src.cols,CV_32FC1);
Mat h = Mat::zeros(src.rows,src.cols,CV_32FC1);

两个图像都是相同的尺寸,并从单个源图像计算。

我想将这两张图片相乘但尝试同时使用

Mat multiply1 = h*ft;

Mat multiply2;
gemm(h,ft,1,NULL,0,multiply2);

但两者都会导致以下断言失败:

  

OpenCV错误:未知函数中的断言失败(a_size.width == len),文件... matmul.cpp   抛出'cv :: exception'后调用终止

我做错了什么?

1 个答案:

答案 0 :(得分:102)

你说矩阵是相同的维度,但你正在尝试对它们执行矩阵乘法。只有当它们是正方形时,才可能将具有相同尺寸的矩阵相乘。在您的情况下,您会收到断言错误,因为尺寸不是正方形。在乘以矩阵时必须要小心,因为乘法有两种可能的含义。

Matrix multiplication 是两个矩阵直接相乘的地方。该操作将尺寸为[a×b]的矩阵A与尺寸为[b×c]的矩阵B相乘,以产生尺寸为[a×c]的矩阵C.在OpenCV中,使用简单的*运算符实现:

C = A * B

Element-wise multiplication 是输出矩阵中的每个像素通过将矩阵A中的像素乘以矩阵B中的相应条目而形成的。输入矩阵应该是相同的大小,并且输出也将是相同的大小。这是使用mul()函数实现的:

output = A.mul(B);