使用OpenCV检测手部

1 投票
1 回答
3402 浏览
提问于 2025-04-17 05:02

我想用openCV来检测一个人什么时候抬起或放下手,或者同时抬起两只手。我看过python opencv提供的教程,但没有一个能解决我的问题。相机放在两个人面前,大约离他们50厘米(所以能看到他们的腰部以上)。这个人可以抬起或放下每只手,或者同时抬起两只手,我需要检测他们的动作。(相机安装在过山车的杆子上,这意味着背景总是在变化)

我该怎么做才能尽快检测到这些动作?不一定要实时检测,但也不能超过0.5秒。整个画面的大小是640x480。现在,因为手只会出现在画面的上半部分,这样可以把搜索区域缩小一半,变成640x240。这就变成了在不断变化的背景中寻找特定物体(手)的问题。

谢谢,
Stefan F.

1 个回答

1

你可以试试一个非常基础但又有效且快速的解决方案,步骤如下:

  1. 使用Canny边缘检测,这是一种找出图像边缘的方法。
  2. 用形态学操作(morphologyEx),选择合适的结构元素。其实简单的腐蚀和膨胀组合也可能足够。
  3. 通过自适应阈值把图像转换成黑白图像。
  4. 用一个代表预期覆盖区域的遮罩对结果进行异或运算。
  5. 在遮罩的每个区域中,异或运算返回的1的数量就是你应该使用的索引。

这个方法非常快,你可以在0.5秒内进行多次迭代并取平均值。此外,你还可以检测人脸,并用它们来调整你的遮罩位置,不过这样会更复杂一些 :)

希望这对你有帮助!

撰写回答