我正在尝试在 2772x128 矩阵和 4000x128 矩阵之间制作产品。两者都是 SIFT 描述符的矩阵,使用下面的代码:
Mat a = Mat(nframes, descrSize, CV_8U, DATAdescr);
Mat b = Mat(vocabulary_size, descrSize, CV_8U, vocabulary);
Mat ab =a * b.t();
问题是在计算产品时,它会抛出一个错误说
err_msg = 0x00cdd5e0 "..\..\..\src\opencv\modules\core\src\matmul.cpp:711: error: (-215) type == B.type() && (type == CV_32FC1 || type == CV_64FC1 || type == CV_32FC2 || type == CV_64FC2)"
解决方案是将数据类型转换为 CV_32FC1
Mat a = Mat(nframes, descrSize, CV_8U, DATAdescr);
Mat b = Mat(vocabulary_size, descrSize, CV_8U, vocabulary);
a.convertTo(a, CV_32FC1);
b.convertTo(b, CV_32FC1);
Mat ab = a * b.t();
它工作得很好,但它消耗了太多时间,大约 1.2 秒。我想尝试相同的产品,但使用整数,看看我是否可以加快速度。难道我做错了什么?我看不出我不能在 CV_8U 矩阵之间做矩阵乘积的任何原因。
编辑:答案与使用其他库或解决其他方式有关。我正在考虑打开一个新线程来提供解决我的问题的建议,但是有人可以回答我最初的问题吗?我不能乘以 CV_8U 或 CV32S 矩阵吗?真的吗?