Простое двумерное матричное умножение OpenCV завершается неудачно - PullRequest
0 голосов
/ 17 октября 2019

Я просто пытаюсь умножить две простые двумерные матрицы.

#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:: Исключение 'what (): OpenCV (4.1.0) /OpenCV/opencv-4.1.0/modules/core/src/matmul.dispatch.cpp:337: ошибка: (-215: утверждение не выполнено) (тип == (((5) & ((1 << 3) - 1)) + (((1) -1) << 3)) || type == (((6) & ((1 << 3) - 1)) + ((((1) -1) << 3)) || type == (((5) & ((1 << 3) - 1)) + (((2) -1) << 3)) || type == (((6) & ((1 << 3) - 1)) + (((2) -1) << 3))) в функции 'gemm' </p>

Прервано (ядро сброшено)

1 Ответ

0 голосов
/ 17 октября 2019

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

Согласно источникам, кажется, что код ожидает float,

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

попробуйте Mat_<float> (работал для меня)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...