3D手势识别(二)左右、上下滑动判断
2018-08-31 16:38
141 查看
场景:前装摄像头。
检测目标:检测手左右滑动状态,手沿x方向滑动,z轴为深度方向,y、z方向相对稳定。
手上下滑动类似。
步骤:
一、图像识别检测手,左右滑取最上点/上下滑取得手的最前点;
二、数据处理:中值滤波、平滑处理和卡尔曼滤波;
三、判断x方向角速度/速度是否超过阈值范围,检测移动方向;
四、判断y方向移动速度是否超过阈值。
部分算法如下:
检测某方向速度是否超过阈值范围,判断移动方向
[code]/************************************ Description: 用时间1的位置1与时间0的位置0得到速度与阈值比较 Method: CheckLeftRight FullName: CheckLeftRight Access: private Parameter: 时间1:const TimeStamp &t1 Parameter: 位置1:float f1 Parameter: 时间0:const TimeStamp &t0 Parameter: 位置0:float f0 Parameter: 速度阈值:thresh Parameter: 标签名:输出日志用 const std::string &label_name Returns: int 0表示小于阈值,1/-1表示方向 Author: Date: 2018/08/30 History: ************************************/ int CheckLeftRight(const TimeStamp &t1, float f1, const TimeStamp &t0, float f0, float thresh, const std::string &label_name) { float vt = ComputeVelocity(t1, f1, t0, f0); int sliding_state = CheckVelocity(vt, -thresh, thresh); return sliding_state; } //计算速度 float ComputeVelocity(const TimeStamp &t1, float f1, const TimeStamp &t0, float f0) { double dt = (t1 - t0).toSec(); double delta_f = f1 - f0; double v = delta_f / dt; return static_cast<float>(v); } //判断 int CheckVelocity(double v, float thresh_low, float thresh_high) { if (v > thresh_high) { return 1; } if (v < thresh_low) { return -1; } return 0; }阅读更多
相关文章推荐
- Android手势识别——上下左右滑动、屏幕上下左右中区域处理
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- iOS开发UI篇—ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- android 判断左右滑动,上下滑动的GestureDetector简单手势检测
- Android OnGestureListener用法 识别用户手势 上下左右滑动
- Android手势识别——上下左右滑动、屏幕上下左右中区域处理
- jquery 判断手势滑动方向(上下左右)
- Fragment上的上下左右滑动onFling的手势识别
- jQuery -- touch事件之滑动判断(左右上下方向)
- iOS上下左右-滑动手势
- GestureDetector和onTouchEvent判断手势方向(上下左右)
- Android三种左右滑动效果 手势识别
- iOS-响应上下左右滑动手势
- android 上下左右手势判断 根据别人的改的
- iOS-响应上下左右滑动手势
- iOS 上下左右滑动手势
- symbian 基本触摸动作的使用(判断上下,左右等手势)
- iOS-响应上下左右滑动手势