C++ 图像中物体颜色的扫描与检测

C++ 图像中物体颜色的扫描与检测,c++,image-processing,opencv,C++,Image Processing,Opencv,我正在开发一个检测拳击手拳击动作的软件。目前,我使用inRange函数使用基于颜色的分割,并将其设置为检测蓝色最小值和蓝色最大值。问题是,这个范围相当宽,我的摄像头有时会挑出噪音并分割出不感兴趣的对象。改进拳击手套扫描图像并在进一步处理前确定准确蓝色值的软件思路 把这个值存储在一个向量中,并在范围小说中调用它,这对我来说是有意义的 // My current function which takes the Minimum and Maximum values of Blue Color Mat

我正在开发一个检测拳击手拳击动作的软件。目前,我使用
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);
所以我会把向量想象到这里的某个地方

  • 扫描上图,计算蓝色值
  • 将此值存储在数组中
  • 在inRange函数中调用数组

  • 有人能为这个问题提出一个解决方案,或者告诉我一个我可以找到答案的信息来源吗?

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

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

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

  • 使用形态学关闭操作清除结果


  • 重要提示:在第2步中,使用不同的量化值(即不同数量的箱子)播放一点。

    +1有趣的项目。您可能需要对高光或反射做一些处理,以降低确定移动的复杂性。谢谢……叶我有许多图像处理功能,用于处理高光/反射/噪声等。此打印Scr在任何处理之前都是从输入帧中获取的。。。eventley out-put窗口显示包裹在边界框中的轮廓。看看这里。我相信,如果我可以事先扫描图像的颜色值,然后在inRange中使用该值,我可以获得更好的结果。ooo ye Thx for+1我认为我的凸轮适合我的目的,我可能错了,但它是高清720p。此外,一旦我可以扫描图像像素并确定平均像素值,我就可以在视频捕获之前使用该值来确定拳击手在给定时间戴的手套的确切颜色。我理解你的评论。我将有一天的tmr,因此我也将花一些时间进行研究:)你的回答很有道理,我将试试看我能取得什么成果。谢谢