python - 实时平滑 2D 点(分散)(在线平滑)
问题描述
我必须处理使用手关键点作为指针(或非接触式鼠标)的任务。
这里的主要问题是(深度学习)手部关键点并不完美(有时在不同的光线、肤色下),因此选择的关键点是散射的,不像我们使用的真实鼠标那样平滑移动。
如何在线(实时)平滑它们。不是给定二维点数组的解决方案,然后我们在这个数组上进行平滑处理。这是新点一一进入的情况,我们必须立即纠正!避免用户遭受鼠标的散射。
我正在使用opencv和python。请善待,因为我是计算机视觉的新手。谢谢
解决方案
最简单的方法是使用移动平均线。您可以非常有效地计算最后n
一步的平均位置,并使用它来“平滑”轨迹:
n = 5 # the average "window size"
counter = 0 # count how many steps so far
avg = 0. # the average
while True:
# every time step
val = get_keypoint_value_for_this_time_step()
counter += 1
coeff = 1. / min(counter, n)
# update using moving average
avg = coeff * val + (1. - coeff) * avg
print(f'Current time step={val} smothed={avg}')
移动平均线的更多变体可以在这里找到。
推荐阅读
- python - 用 html 表的第一行更新 excel 文件(pandas/python)
- unity3d - 使用 VR 耳机时 Input.GetAxis("Mouse X") 和 Input.GetAxis("Mouse Y") 的响应不正确
- html - 删除列和内容之间的间距
- python - openpyxl:ValueError:对已关闭文件的 I/O 操作
- python - python cesar密码问题
- jquery - 使用 jquery ajax json 从 spring rest api 接收数据到 HTML
- mysql - Dll 未找到异常 MYSQL Connector-.Net
- python - 如何根据来自配置文件(文本或 CSV)的用户输入过滤熊猫数据框 配置将告诉过滤器值和用于过滤的列
- java - Linux上Java中的内存操作
- java - 加法持久性算法 Java