我有一个名为coordinatePointPrev的矩阵,它是1X3,还有另一个名为coordinatePointCurrFrame的矩阵,它是3X1。最后一个叫做基金的矩阵是3X3;所有都被定义为矩阵。
现在我想将 coordinatePointPrev * fund * coordinatePointCurr 相乘并将结果保存在'resultOfEq'中但是对于第6行,我遇到错误说“无法隐式转换类型'Emgu.CV .Matrix'到'加倍“;
我出错的地方
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);
}
答案 0 :(得分:1)
Mul
方法在您尝试将其分配给其他矩阵的一个单元格时返回矩阵。
你所寻求的是这样的
resultOfEq[0, i] = coordinatePointPrev.Mul(fund).Mul(coordinatePointCurr)[0,0];
这应该通过编译器。但是我不确定它是否会起作用(我不知道这个特定的库,但是其中任何一个都会在其中一个Mul调用中崩溃)。
1X3矩阵(coordinatePointPrev)* 3X3矩阵(基金)= 1X3矩阵
1X3矩阵* 1X3(coordinatePointCurr)矩阵应该产生误差,因为你需要3X1矩阵才能使用乘法运算符并产生你最想要的1X1矩阵。
所以我相信你想要其中一个(coordinatePointCurr
)为3X1:
new Matrix<double>(new double[,] { {c}, {d}, {1} } })
或者你需要使用不同的乘法顺序,因为第一个矩阵的列必须与第二个矩阵的行相同(并且矩阵乘法不是可交换的(A * B&lt;&gt; B * A))
另外我会提醒foreach中没有使用索引器i
所以它基本上做了相同(硬)计算i次相同的结果并产生1Xn矩阵的相同结果数字。