OpenCv,composeRT提供奇怪的结果

时间:2018-08-22 11:31:57

标签: opencv

我有一个openCv应用程序,可以找到基准标记。我想做的就是在标记空间中获得这些标记之间的相对转换。

所有标记都在同一平面上,成一直线,并且旋转不同,如下所示:

marker placement

找到的第一个标记,我将以下变量设置为“原点”或零点。

cv::Mat otv(OriginTvec); //the first marker found, translation
cv::Mat orv(OriginRvec); //rotation vector

然后,对于下一个标记,我运行以下代码:

cv::Mat composedT, composedR;
relativePosition(orv, otv, rvec, tvec, composedR, composedT); //rvec, tvec are the current marker transforms

具有以下功能:

void inversePerspective(cv::Mat rvec, cv::Mat tvec, cv::Mat &invRvec, cv::Mat &invTvec)
{
    cv::Mat R;
    cv::Rodrigues(rvec, R);
    R = R.t();
    invTvec = -R * tvec;
    cv::Rodrigues(R, invRvec);  
}


void relativePosition(cv::Mat rvec1, cv::Mat tvec1, cv::Mat rvec2, cv::Mat tvec2, cv::Mat &composedRvec, cv::Mat &composedTvec)
{
    // Inverse the second marker, the right one in the image
    cv::Mat invRvec, invTvec, orgRvec, orgTvec;
    inversePerspective(rvec2, tvec2, invRvec, invTvec);

    cv::composeRT(rvec1, tvec1, invRvec, invTvec, composedRvec, composedTvec);

}

这应该给我在composedRcomposedT矩阵中从一个标记到另一个标记的相对转换。

当我打印结果时,它适用于一个标记,而不适用于另一个标记。

标记ID 10 :(正确结果)

 Origin Tvec:: [17.40034702383909; 0.9026984362994943; 97.32508809945712]

marker 10 tvec: [4.461679451405943; 0.6087983984519095; 97.92729032119958]

relative transform:: [12.94176130094641; -0.5101704536674134; -0.329672315462247]

标记ID 11 :(错误结果)

Origin Tvec: [17.40034702383909; 0.9026984362994943; 97.32508809945712]

marker 11 tvec: [-8.965452763369187; 1.030574874942149; 96.66721684253494]

relative transform: [-0.9334416873257574; -26.34493062970068;0.8233238281594311]

看起来轴切换结果不正确。但是我在哪里错了?

我已经检查了返回的初始标记转换,但它们是正确的,因此上述函数存在问题。

0 个答案:

没有答案