Утверждение OpenCV не удалось при умножении матрицы

Я умножаю две матрицы с помощью OpenCV, A в NxM и B в MxP.

Согласно документации:

Все массивы должны иметь одинаковый тип и одинаковый размер (или размер ROI). Для типов с ограниченным диапазоном эта операция является насыщающей.

Однако согласно теории умножения матриц:

Предположим, что нужно перемножить две матрицы (обобщение на любое число обсуждается ниже). Если A представляет собой матрицу размера n × m, а B представляет собой матрицу размера m × p, результатом будет AB их умножения — матрица размера n × p, определенная только в том случае, если количество столбцов m в A равно количеству строк m в Б.

этот код не должен работать?

- (CvMat *) multMatrix:(CvMat *)AMatrix BMatrix:(CvMat *)BMatrix 
{
  CvMat *result = cvCreateMat(AMatrix->rows, BMatrix->cols, kMatrixType);
  cvMul(AMatrix, BMatrix, result, 1.0);
  return result;
}

Я получаю следующее исключение:

Ошибка OpenCV: утверждение не удалось (src1.size == dst.size && src1.channels() == dst.channels()) в cvMul, файл /Users/Aziz/Documents/Projects/opencv_sources/trunk/modules/core/src /arithm.cpp, строка 2728

kMatrixType — CV_32F, A — 6x234, B — 234x5, а результат — 6x5...

Я делаю что-то неправильно? Или это ограничение OpenCV на умножение матриц?


person dwbrito    schedule 07.06.2013    source источник
comment
Я не хочу быть грубым, но, черт возьми! В документации четко указано, что матрицы должны быть одинакового размера, поэтому не спрашивайте, почему ваш код не работает.   -  person jnovacho    schedule 08.06.2013


Ответы (1)


Вы делаете поэлементное умножение с cvMul.

Вы должны посмотреть на cvMatMul для правильного умножения матриц.

http://opencv.willowgarage.com/wiki/Matrix_operations

person PureW    schedule 07.06.2013