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

本文详细解析了在使用OpenCV进行Mat矩阵运算时遇到的类型不匹配错误,阐述了错误产生的原因,并提供了两种解决方案:一是确保矩阵类型一致;二是通过强制类型转换来避免错误。此外,还提到了在特定情况下,如使用findFundamentalMat函数时可能遇到的类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中常出现,一旦出错极难发现,值得关注一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值