使用 OpenCV 检测手

Posted

技术标签:

【中文标题】使用 OpenCV 检测手【英文标题】:Detect Hand using OpenCV 【发布时间】:2011-10-26 14:21:43 【问题描述】:

我想使用 openCV 来检测一个人何时举起或放下手或双手。我浏览了 python opencv 提供的教程,但似乎没有一个能完成这项工作。两个人前面有一个摄像头,距离他们大约 50 厘米(所以你从腰部以上看到他们)。这个人可以抬起或放下每只手臂,或者两只手臂,我必须检测他们何时这样做。(相机安装在过山车的横杆上;这意味着背景总是在变化)

我怎样才能在最快的时间内检测到这一点?它不必是实时检测,但不必超过 0.5 秒。整个图像为 640x480。现在,由于手只能出现在图像的顶部,这会将搜索区域减少一半 => 640x240。这将减少在不断变化的背景中搜索某个对象(手)的问题。

谢谢你, 斯蒂芬·F.

【问题讨论】:

您能否详细说明您缺少的内容,例如Google results? 你好。是的。提出的算法适用于 HSV 颜色空间中的肤色检测,但我需要检测整个手 + 手臂,而不仅仅是手势。有时我的手可能有颜色,有时这个人可能戴着手套。 【参考方案1】:

您可以尝试非常基本但非常有效且快速的解决方案: 在图像的上半部分:

    精巧的边缘检测 具有足够结构元素的morphologyEx(腐蚀/扩张的简单组合可能就足够了) 使用自适应阈值转换为 BW 用表示预期覆盖区域的掩码对结果进行异或运算。 在掩码的每个区域中由 xor 返回的个数是您应该使用的索引。

这非常快,您可以在 0.5 秒内进行多次迭代并使用平均值。你也可以检测面部并使用它们来调整你的面具的位置,但这会更昂贵:)

希望对你有帮助

【讨论】:

以上是关于使用 OpenCV 检测手的主要内容,如果未能解决你的问题,请参考以下文章

基于 OpenCV 的手掌检测和手指计数

使用 OpenCV 的动态(移动)手势

OpenCV triangulatePoints 惯用手

在弱光条件下性能更好(OpenCV)?

OpenCV C++ 手势识别

OpenCV 和 ROS:cvMAT 中的空指针错误