扫描和检测图像中的对象颜色

时间:2013-02-07 20:34:52

标签: c++ image-processing opencv

我正在开发一种可以检测拳击手拳击动作的软件。目前我使用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);

所以我想把矢量想象到这里的某个地方。

enter image description here

  1. 扫描上面的图像计算蓝色值
  2. 将此值存储在数组中
  3. 在inRange函数中调用数组
  4. 有人可以建议解决这个问题,或者直接向我寻找可以寻找答案的信息来源吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  1. 明亮的光度和色度 - 您的固定范围在不同光线条件下不会很好地工作。你的射程很宽,可能是因为你试图在黑暗和光线下同时看到“蓝色”。将图像转换为HSV(或La * b *)并丢弃V(或L),保留H和S(或a *和b *)。

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

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

  4. 重要提示:在第2步,使用不同的量化值(即不同数量的分档)播放一些内容。