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 行列を乗算できませんか? 本当に?