1

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 の制限ですか?

4

1 に答える 1

3

で要素ごとの乗算を行っていますcvMul

cvMatMul適切な行列乗算を行うには、を参照してください。

http://opencv.willowgarage.com/wiki/Matrix_operations

于 2013-06-07T10:03:47.457 に答える