如何平均继续翻译向量

时间:2018-06-18 08:54:40

标签: c++ opencv image-processing pose-estimation aruco

我在现场网络摄像头Feed中使用C ++中的OpenCV进行AruCo标记的姿势估计。我的fps是30,所以当我打印翻译向量时,我得到翻译向量的连续值,即每秒30个值。这些值是波动的,因此为了使其更稳定,我想平均前30个值然后打印它然后接下来的30个值并打印出来。怎么做?。我的代码如下

aruco::estimatePoseSingleMarkers(markerCorners, arucoSquareDimension, cameraMatrix, distanceCoefficients, rotationVectors, translationVectors);

    for (int i = 0; i < markerIds.size(); i++)
    {
        aruco::drawAxis(Croppedframe, cameraMatrix, distanceCoefficients, rotationVectors[i], translationVectors[i], 0.1f);

        cout << translationVectors[i] << "translation" << "vector" << markerIds[i] << endl;

    }

1 个答案:

答案 0 :(得分:1)

如果translationVectors是一个将30个翻译作为cv :: Mat的向量,您可以尝试使用简单的加法和除法来获得平均值:

cv::Mat accum(3,1,CV_64F, cv::Scalar::all(0.));
for( const auto& t: translationVectors)
{
  accum += t;
}
// avoid division by zero
if (!translationVectors.empty())
  accum /= translationVectors.size();

但是我建议您使用kalman filter,这有助于使姿势估计稳定。如果没有,至少running average比30个姿势然后接下来的30个更准确。

我没有测试过代码,但这个想法就在那里。如果您遇到问题,请评论答案,我会尽力帮助您。