无法将类型'Emgu.CV.Matrix <double>'隐式转换为'double </double>

时间:2013-12-18 23:20:34

标签: c# opencv emgucv opencvsharp

我有一个名为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);
                }

1 个答案:

答案 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矩阵的相同结果数字。