0

我有一个矩阵,称为坐标点Prev,它是 1X3,还有另一个矩阵叫做坐标点CurrFrame,它是 3X1。anf 最后是一个名为 fund 的矩阵,它是 3X3;都被定义为矩阵。

现在我想乘以coordinatePointPrev * fund * coordinatePointCurr并将结果保存在 'resultOfEq' 但对于第 6 行,我遇到错误说“无法将类型 'Emgu.CV.Matrix' 隐式转换为 'double ”;

我哪里错了

   Matrix<double> resultOfEq = new Matrix<double>(1, n);    
        for (int i = 0; i < n; i++)
                {
 Matrix<double> coordinatePointPrev = new Matrix<double>(new double[,] { { a,b, 1 } });
 Matrix<double> coordinatePointCurr = new Matrix<double>(new double[,] { {c, d, 1 } });
 resultOfEq[0, i] = coordinatePointPrev.Mul(fund).Mul(coordinatePointCurr);
                }
4

1 回答 1

1

Mul当您尝试将矩阵分配给另一个双倍矩阵的一个单元格时,该方法返回矩阵。

你所寻求的是这样的

resultOfEq[0, i] = coordinatePointPrev.Mul(fund).Mul(coordinatePointCurr)[0,0];

这应该通过编译器。但我不确定它会起作用(我不知道这个特定的库,但任何其他库都会在 Mul 调用中崩溃)。

1X3 矩阵 (coordinatePointPrev) * 3X3 矩阵 (fund) = 1X3 矩阵

1X3 矩阵 * 1X3 (coordinatePointCurr) 矩阵应该会产生错误,因为您需要 3X1 矩阵才能使用乘法运算符并产生您最可能想要的 1X1 矩阵。

所以我相信你希望其中一个 ( coordinatePointCurr) 是 3X1:

new Matrix<double>(new double[,] { {c}, {d}, {1} } })

或者您需要使用不同的乘法顺序,因为第一个矩阵的列必须与第二个矩阵的行相同(并且矩阵乘法不可交换 (A * B <> B * A) )

另外我要提醒的是,在 foreach 中没有使用索引器i,因此它基本上执行 i 次相同(硬)计算以获得 i 次相同结果并产生 1Xn 矩阵充满相同的数字。

于 2013-12-19T00:25:28.693 回答