Take the 2-minute tour ×

I have two Mat images in OpenCV:

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

Both images are the same dimension and are calculated from a single source image.

I would like to multiply these two images but have tried using both

Mat multiply1 = h*ft;

Mat multiply2;

but both result in the following assertion failure:

OpenCV Error: Assertion failed (a_size.width == len) in unknown function, file ...matmul.cpp Termination called after throwing 'cv::exception'

What am I doing wrong?

share|improve this question
To see what the exception actually says, put the failing line inside a try block like: try { [...] } catch (cv::Exception const & e) { std::cerr<<"OpenCV exception: "<<e.what()<<std::endl; } –  Ross Rogers Nov 11 '12 at 19:59
add comment

1 Answer

up vote 20 down vote accepted

You say that the matrices are the same dimensions, and yet you are trying to perform matrix multiplication on them. You have to be careful when multiplying matrices, as there are two possible meanings of multiply.

Matrix multiplication is where two matrices are multiplied directly. This operation multiplies matrix A of size [a x b] with matrix B of size [b x c] to produce matrix C of size [a x c]. In OpenCV it is achieved using the simple * operator:

C = A * B

Element-wise multiplication is where each pixel in the output matrix is formed by multiplying that pixel in matrix A by its corresponding entry in matrix B. The input matrices should be the same size, and the output will be the same size as well. This is achieved using the mul() function:

output = A.mul(B);
share|improve this answer
Sorry, but I fail to see how this answers the question. Why should the assertion fail in the first statement "h*ft"? –  Devesh Mar 5 at 10:21
Because as it stands, h*ft is attempting to perform matrix multiplication which, noticing how h and ft are formed, would require src.rows == src.cols. –  Chris Mar 5 at 11:17
Oh yeah, of course. I assumed they were equal. My bad. –  Devesh Mar 5 at 11:20
add comment

Your Answer


