opencv - 光流和手指跟踪

我正在使用opencv实现手指跟踪系统
并使用
calcOpticalFlowPyrLK(pGmask,nGmask,手指,轨道,状态,错误);
执行LK跟踪器。

我不清楚这个概念,在实现LK跟踪器后,应该如何检测手指的运动?另外,跟踪器获取最后一帧和当前帧,如何检测一系列 Action 或连续手势(例如5帧内)?

最佳答案

calcOpticalFlowPyrLK的第四个参数(此处为track)将包含第二张图像(此处为nGmask)中输入要素的计算出的新位置。

在简单的情况下,您可以分别估计fingerstrack的质心,以推断运动。可以根据从fingers的质心指向track的质心的 vector 的方向和大小来做出决策。

此外,复杂的运动可以视为时间序列,因为运动由在时间间隔上进行的一些连续测量组成。这些测量可以是上述 vector 的方向和大小。因此,任何运动都可以表示如下:

("label of movement", time_series), where
time_series = {(d1, m1), (d2, m2), ..., (dn, mn)}, where
di is direction and mi is magnitude of the ith vector (i=1..n)

因此,时间序列由n * 2测量值(采样n时间)组成,这是唯一如何识别运动的问题?

如果您具有有关机芯的先验信息,即您知道如何执行圆周机芯,写a字母等,那么问题可以简化为:如何使时间序列与自身对齐?

这是众所周知的Dynamic Time Warping(DTW)。也可以将其视为生成模型,但可在序列对之间使用。 DTW是一种算法,用于测量两个时间序列之间的相似度,这些时间或速度可能会发生变化(在我们的情况下)。

通常,DTW计算具有特定限制的两个给定时间序列之间的最佳匹配。在时间维度上对序列进行非线性扭曲,以确定其相似性的度量,而与时间维度上的某些非线性变化无关。

https://stackoverflow.com/questions/30097759/

相关文章:

python - Spatstat:给定二维点列表,如何将它们连接到多边形中,并进一步使其成为研究区

python-2.7 - 如何提高Python PIL的最终图像质量和清晰度?

android - javacv和opencv之间的转换以从Mat中获取均值和stdDev

opencv - BackgroundSubtractorMOG2 阴影检测在阳光充足的场景中不起作

android - 在OCR之后从Android中的图像检测字体颜色

opencv - 在 OpenCV 图像拼接中混合伪影

opencv - 在 Opencv 中处理相机流,使用 FFMPEG 将其推送到 RTMP(NGIN

delphi - 当我尝试安装 Delphi-OpenCV。我得到 "%1 is not a val

matlab - 如何在 OpenCV 中进行网格插值 interp2

opencv - 从 OpenCV 中的边获取多边形