1

我正在开发一种检测拳击手出拳动作的软件。目前我使用inRange函数使用基于颜色的分割并将其设置为检测蓝色最小值和蓝色最大值。问题是范围很广,我的摄像头有时会挑选出噪音并分割不感兴趣的对象。为了改进软件,我通过扫描拳击手套的图像并在进一步处理之前建立准确的蓝色值。

将这个值存储在 Vector 中并在 inRange 小说中调用它对我来说是有意义的

// My current function which takes the Minimum and Maximum values of Blue Color
Mat range_out;
inRange(blur_out, Scalar(100, 100, 100), Scalar(120, 255, 255), range_out);

所以我会将向量成像到这里的某个地方。

在此处输入图像描述

  1. 扫描上图计算蓝色值
  2. 将此值存储在数组中
  3. 在 inRange 函数中调用数组

有人可以建议解决此问题或将我引导到可以寻找答案的信息源吗?

4

2 回答 2

0

因为您正在检测运动中的拳击手手套,所以首先使用运动将其与场景中的其他元素分开……使用帧微分或光流将手套和其他运动区域与非运动区域分开……现在在那些运动中区域尝试一些颜色检测...

于 2013-02-08T06:29:26.180 回答
0
  1. 将亮度和色度分开- 您的固定范围在不同的光照条件下不会很好地工作。您的范围很广,可能是因为您试图同时在黑暗和光线下看到“蓝色”。将图像转换为 HSV(或 La*b*)并丢弃 V(或 L),保留 H 和 S(或 a* 和 b*)。

  2. 学习颜色分布而不是简单的范围- 获取一些样本并计算手套上像素的 H 和 S(a* 或 b*)上的 2D 颜色直方图。此直方图将成为对象颜色分布的模型。然后,使用c2.calcBackProjection检测场景中感兴趣的像素。

  3. 使用形态关闭操作清理结果

重要提示:在步骤 2 中,使用不同的量化值(即不同数量的 bin)进行一些操作。

于 2013-02-08T11:01:30.167 回答