OpenCV 简单的二维矩阵乘法失败

Posted

技术标签:

【中文标题】OpenCV 简单的二维矩阵乘法失败【英文标题】:OpenCV simple 2D matrix multiplication fails 【发布时间】:2019-10-17 18:15:43 【问题描述】:

我只是想将两个简单的二维矩阵相乘。

#include <iostream>
#include "opencv2/core.hpp"

using namespace std;
using namespace cv;

int main(const int argc,const char* argv[])


    Mat A = (Mat_<char>(2,2) << 1,2,3,4);
    Mat B = (Mat_<char>(2,2) << 2,2,2,2);
    Mat C = A*B;

    cout << C << endl;

    return 0;

为什么我会得到核心转储(gemm)?

在抛出 'cv::Exception' 实例后调用终止 什么():OpenCV(4.1.0)/OpenCV/opencv-4.1.0/modules/core/src/matmul.dispatch.cpp:337:错误:(-215:断言失败)(类型==(((5 ) & ((1

中止(核心转储)

【问题讨论】:

【参考方案1】:

https://github.com/opencv/opencv/blob/master/modules/core/src/matmul.dispatch.cpp#L337

根据消息来源,似乎代码需要浮点数,

CV_Assert_N( type == B.type(), (type == CV_32FC1 || type == CV_64FC1 ||类型 == CV_32FC2 ||类型 == CV_64FC2) );

试试Mat_&lt;float&gt;(为我工作)

【讨论】:

天哪,成功了!谢谢!我试过 int, unsigned char ...但不是 float ^^ @LukasLeitner -- 建议 -- 断言告诉您源代码中的哪一行出现了问题。只需转到该行,它就基本上回答了您的问题。

以上是关于OpenCV 简单的二维矩阵乘法失败的主要内容,如果未能解决你的问题,请参考以下文章

二维卷积作为矩阵-矩阵乘法[关闭]

[BZOJ2738]矩阵乘法 整体二分+二维树状数组

bzoj2738矩阵乘法 整体二分 二维树状数组

BZOJ 2738 矩阵乘法(整体二分+二维树状数组)

OpenCV 断言在矩阵乘法上失败

bzoj2738矩阵乘法