Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 如何使我的彩色物体检测和跟踪程序更有效?_Opencv_Image Processing_Computer Vision - Fatal编程技术网

Opencv 如何使我的彩色物体检测和跟踪程序更有效?

Opencv 如何使我的彩色物体检测和跟踪程序更有效?,opencv,image-processing,computer-vision,Opencv,Image Processing,Computer Vision,首先,感谢所有stackoverflow用户的帮助。我真的很感激因此,我制作了一个彩色物体检测程序。我可以控制鼠标的点击,甚至可以在MS paint中绘制一些东西现在,我必须在学院的工程设计竞赛中展示我的作品。我需要让我的计划更有效。首先,我用来跟踪和移动的对象是一个红色的对象,我通过调整HSV值过滤掉了周围的颜色但是,当我在不同的环境中尝试代码时,我发现了一些问题。周围有很多红色的物体,我的程序检测到这些物体并给我假值 因此,我的目标是:-我必须让我的程序在几乎所有的环境中运行,并使程序独立于

首先,感谢所有stackoverflow用户的帮助。我真的很感激
因此,我制作了一个彩色物体检测程序。我可以控制鼠标的点击,甚至可以在MS paint中绘制一些东西

现在,我必须在学院的工程设计竞赛中展示我的作品。我需要让我的计划更有效。首先,我用来跟踪和移动的对象是一个红色的对象,我通过调整HSV值过滤掉了周围的颜色
但是,当我在不同的环境中尝试代码时,我发现了一些问题。周围有很多红色的物体,我的程序检测到这些物体并给我假值


因此,我的目标是:-我必须让我的程序在几乎所有的环境中运行,并使程序独立于背景。我的程序应该只跟踪和检测我想要的对象。因为,我是大学一年级的本科生,我的知识有限。所以,我想从专家那里得到一些建议。谢谢请不要使用源代码,因为我想理解并纠正我的错误。

假设您有一个二进制图像作为颜色过滤的输出,那么:

  • 使用
    findContours()
    -function()提取对象。你可以得到所有红色物体的轮廓,包括你的可乐帽
  • 现在你必须区分你的可乐帽和其他红色物体。在您的情况下,最好使用形态特征,如区域(如您所述)和对象的圆形(帽是圆形的!):

    • 面积可以通过
      轮廓面积()
      -function()计算,并与阈值进行比较

    • 物体的圆度可以通过圆度=(4*PI*A)/p^2来计算,其中A是面积(通过上述函数计算),p是物体的周长。周长是
      arcLength()
      -function()的输出。圆的圆度为1。您可以将对象的值与它进行比较

  • 综上所述,使用对象的面积和对象的圆度特征来区分焦炭帽与其他红色对象。

    为了减少噪声(错误检测的数量),您可以尝试使用双阈值(我可能错了,但我认为它被称为滞后阈值,在Canny边缘检测器中使用的方法):

  • 您需要创建两个图像,一个阈值为t1=50,另一个阈值为t2=150(您可以调整参数以获得更稳定的性能,即启发式地找到最佳值)

  • 对于t2中的每个非黑色像素(x,y):在(x,y)处用灰色填充t1,在(x,y)处用黑色填充t2

  • 完成后,擦除t1中的所有非灰色像素

  • 现在t1应该对彩色球的可能位置有一个很好的似然估计

    注意:阈值化并不一定意味着您必须使用opencv的“阈值”功能。您可以编写自己的代码,将颜色和传递颜色的范围作为输入

    如果您只查找一个球,只需使用findContours函数查找面积最大的轮廓


    不要试图达到100%的性能,记住:“完美是好的敌人”-Arisotle。

    嘿,背景中的红色对象看起来如何,与您的跟踪对象相似?也许,你能提供一个例子吗?相机在跟踪时是固定的还是移动的?@Dennis:-Dennis,我用的红色物体基本上是一个可乐瓶盖。因此,当我尝试通过改变周围条件来使用该程序时,我放置了各种红色物体,如红帽、T恤上的红线、红笔等。当我检查阈值图像时,我发现这些物体出现在阈值图像中,我的程序显示“背景噪音太大,无法检测到任何物体”。我想我必须上传一张照片,这样你才能更好地了解我的情况。我有没有办法让我的程序只检测特定区域的物体,比如像可乐帽这样的物体?:-谢谢丹尼斯。我真诚地感谢你的帮助。你的想法真的帮了我很大的忙。我已经计算了物体的圆度,它大约是0.8-0.9。由于某种原因,它不是完全循环的。另外,当我在窗口中移动它时,在某些点上它有点崩溃(有点像碎片),圆度降低到0.7,但我仍然使用圆度选项过滤出一些较大的对象。