Подтвердить что ты не робот

Матричное умножение в OpenCV

У меня есть два изображения Mat в OpenCV:

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'

Что я делаю неправильно?

4b9b3361

Ответ 1

Вы говорите, что матрицы имеют одинаковые размеры, и все же вы пытаетесь выполнить на них матричное умножение. Умножение на одних и тех же размерных матрицах было бы возможно, если бы его квадратная матрица. В вашем случае вы получаете ошибку утверждения, потому что размеры не квадратные. Вы должны быть осторожны при умножении матриц, так как есть два возможных значения умножения.

Матричное умножение - это то, где две матрицы умножаются напрямую. Эта операция умножает матрицу A размера [a x b] на матрицу B размера [b x c] для создания матрицы C размера [a x c]. В OpenCV это достигается с помощью простого оператора *:

C = A * B

Элементарное умножение - это где каждый пиксель в выходной матрице формируется путем умножения этого пикселя в матрице A по соответствующей записи в матрице B. Входные матрицы должны быть одного размера, а выход будет иметь одинаковый размер. Это достигается с помощью функции mul():

output = A.mul(B);