如何平均继续翻译向量
How to average continues translation vectors
我正在使用 Open C++CV 在实时网络摄像头馈送上使用 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;
}
如果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();
但是,我建议您使用卡尔曼滤波器,它有助于使姿势估计稳定。如果没有,至少一个跑步平均值是一个比采取 30 个姿势然后下一个 30 个姿势更准确的解决方案。
我还没有测试代码,但想法就在那里。如果您遇到问题,请评论答案,我会尽力为您提供更多帮助。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 不同翻译单元中不可重载的非内联函数定义
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 矩阵向量乘法(cublasDgemv)返回零
- 一对向量构造函数:初始值设定项列表与显式构造
- 如何平均继续翻译向量
- glm ::翻译 - 它是否从向量构建矩阵