OpenCV报错:error: (-215:Assertion failed) type == B.type() in function 'gemm'的原因,修改方法

1.问题

OpenCV在做Mat矩阵运算的时候报如下错误:

error: (-215:Assertion failed) type == B.type() in function 'gemm'

如下代码就会报此错误:

    cv::Mat A(3,3,CV_32F);
    cv::Mat B(3,3,CV_64F);

    std::cout << A*B << std::endl;

2.原因

主要是因为两个做运算的矩阵数据类型不统一,更细致一点儿说,cv::Mat A(3,3,CV_32F)定义的矩阵A在提取数据时使用的是指向32位float类型的指针,而B是64位,此时32位的指针取B中的数据时就会报错。

3.解决办法

可以将矩阵定义为相同类型再做运算,或者强制转换成相同的类型再做运算:

    cv::Mat A(3,3,CV_64F);
    cv::Mat B(3,3,CV_64F);
    std::cout << A*B << std::endl;

	//或者
	cv::Mat A(3,3,CV_32F);
    cv::Mat B(3,3,CV_64F);
    A.convertTo(A, CV_64F);
    std::cout << A*B << std::endl;

4.另外可能出现的情况

cv::Mat fundamental_matrix = cv::findFundamentalMat(point_curr, point_last);

cv::findFundamentalMat()函数在64位系统中的返回值是CV_64F的Mat,如果和CV_32F的Mat运算也会报如上错误。

像这样的细节,在OpenCV中常出现,一旦出错极难发现,值得关注一下!

你可能感兴趣的:(OpenCV,opencv,c++,数据结构,计算机视觉)