OpenCV で 2 つの行列を乗算しています。A は NxM で、B は MxP です。
ドキュメントによると:
すべての配列は、同じ型と同じサイズ (または ROI サイズ) でなければなりません。範囲が制限されているタイプの場合、この操作は飽和しています。
ただし、行列乗算の理論により、次のようになります。
2 つの行列が乗算されると仮定します (任意の数への一般化については以下で説明します)。A が n×m 行列で、B が m×p 行列の場合、それらの乗算の結果は AB になります。これは、A の列数 m が行数 m に等しい場合にのみ定義される n×p 行列です。 B.
このコードは機能するべきではありませんか?
- (CvMat *) multMatrix:(CvMat *)AMatrix BMatrix:(CvMat *)BMatrix
{
CvMat *result = cvCreateMat(AMatrix->rows, BMatrix->cols, kMatrixType);
cvMul(AMatrix, BMatrix, result, 1.0);
return result;
}
次の例外が発生します。
OpenCV エラー: アサーションに失敗しました (src1.size == dst.size && src1.channels() == dst.channels()) cvMul、ファイル /Users/Aziz/Documents/Projects/opencv_sources/trunk/modules/core/src で/arithm.cpp、2728 行目
kMatrixType は CV_32F、A は 6x234、B は 234x5、結果は 6x5 です...
私は何か間違ったことをしていますか?それとも、これは行列乗算に対する OpenCV の制限ですか?