我在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'后调用终止
我做错了什么?
答案 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);