41

我在 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”后调用终止

我究竟做错了什么?

4

1 回答 1

125

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

矩阵乘法是两个矩阵直接相乘的地方。此操作将大小为 [axb​​] 的矩阵 A 与大小为 [bxc] 的矩阵 B 相乘,以生成大小为 [axc] 的矩阵 C。在 OpenCV 中,它是使用简单的*运算符实现的:

C = A * B

逐元素乘法是输出矩阵中的每个像素由矩阵 A 中的像素乘以矩阵 B 中的相应条目形成的。输入矩阵的大小应该相同,输出的大小也应该相同。这是使用以下mul()功能实现的:

output = A.mul(B);
于 2012-06-08T12:34:10.140 回答