【问题标题】:Cannot implicitly convert type 'Emgu.CV.Matrix<double>' to 'double无法将类型 'Emgu.CV.Matrix<double>' 隐式转换为 'double
【发布时间】:2014-01-07 08:42:32
【问题描述】:

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

现在我想乘 coordinatePointPrev * fund * coordinatePointCurr 并将结果保存在 'resultOfEq' 但对于第 6 行,我遇到错误说“无法隐式转换类型 'Emgu.CV .Matrix' to '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);
                }

【问题讨论】:

    标签: c# opencv emgucv opencvsharp


    【解决方案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&lt;double&gt;(new double[,] { {c}, {d}, {1} } })

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

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

    【讨论】:

    • 我将 coordinatePointCurr 更改为 3X1,但错误仍然存​​在。我相信这与opencv中的Matrix和double之间的转换有关
    • 第一个代码解决了这个问题。最后那个 [0,0] 很重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多