手动初始化 cv::Matx

Manually initializing a cv::Matx?

本文关键字:Matx cv 初始化      更新时间:2023-10-16

我有一些相机校准数据,格式如下:

  0.3072423    -0.0104122    -0.9515744     -208.5614
0.003617216     0.9999457  -0.009773563     -4.705516
  0.9516244 -0.0004391983     0.3072633     -152.5427
          0             0             0             1

我有一个将const cv::Matx<T, 4, 4>& M作为参数的函数。(来自第三方代码)

template<typename T>
cv::Matx<T, 6, 1> hom2cayley(const cv::Matx<T, 4, 4>& M)
{
    cv::Matx<T, 3, 3> R(M(0, 0), M(0, 1), M(0, 2),
        M(1, 0), M(1, 1), M(1, 2),
        M(2, 0), M(2, 1), M(2, 2));
    cv::Matx<T, 3, 1> C = rot2cayley(R);
    return cv::Matx<T, 6, 1>(C(0, 0), C(1, 0), C(2, 0),
        M(0, 3), M(1, 3), M(2, 3));
}

抱歉,如果这是一个愚蠢的问题,但是如何使用上述值手动填充Matx,以便将其传递给函数?

我有:

void main()
{
    template<typename T>
    const cv::Matx<T, 4, 4> camData{ 0.3072423, - 0.0104122, - 0.9515744, - 208.5614,
        0.003617216,     0.9999457, - 0.009773563, - 4.705516,
        0.9516244, - 0.0004391983,     0.3072633, - 152.5427,
        0 ,            0 ,            0    ,         1 };
    hom2cayley(camData);  //invalid argument, camData is undefined.
}

。但它给出了上面的错误。我在这里犯了什么错误?

谢谢。

主要情况下,您必须使用特定类型的 Matx。就您的目的而言,它是浮动或双倍。将cv::Matx<T, 4, 4>替换为 cv::Matx<double, 4, 4>,并在 main 中删除template<typename T>