Search code examples
c++opencvmatrix-multiplication

Opencv Matrix multiplication


I need to multiply a matrix and its transpose but I get the following error :

OpenCV Error: Assertion failed (type == B.type() && (type == CV_32FC1 || type ==
 CV_64FC1 || type == CV_32FC2 || type == CV_64FC2)) in unknown function, file ..
\..\..\src\opencv\modules\core\src\matmul.cpp, line 711

Here is the code:

int dA[] = {
     1,     2,     3,
     4,     5,     6,
     6,     5,     4,
    }; 
Mat A = Mat(3,3, CV_32S, dA );
Mat C = A.t()* A;

Solution

  • OpenCV only supports matrix multiplication for matrices of floating point real or complex types.

    You are creating matrix of signed integer type.

    Supported types are:

    CV_32FC1 //real float
    CV_32FC2 //complex float
    CV_64FC1 //real double
    CV_64FC2 //complex double
    

    The following similar code will work:

    float dA[] = {
         1,     2,     3,
         4,     5,     6,
         6,     5,     4,
        }; 
    Mat A = Mat(3,3, CV_32F, dA );
    Mat C = A.t()* A;