7

我需要在网络摄像头的视频帧中进行强大的运动检测和跟踪。背景总是一样的。目的是识别物体的位置,如果可能的话没有阴影,但不那么迫切需要去除阴影。我已经尝试过opencv算法进行背景减法和阈值处理,但这仅取决于一张图像作为背景,如果背景在亮度(或相机自动对焦)方面发生了一点变化,我需要该算法强大亮度或一些阴影的变化很小。

4

3 回答 3

4

强大的跟踪方法是世界各地正在开发的广泛研究兴趣的一部分......这里可能是解决您的问题的关键,这些问题非常有趣但广泛而开放。

首先,其中很多假设亮度恒定(因此您所要求的很难实现)。例如:

  • 卢卡斯-卡纳德
  • 霍恩-雄克
  • 块匹配

广泛用于跟踪,但假设亮度恒定。

然后其他有趣的可能是 meanshift 或 camshift 跟踪,但你需要一个投影来遵循......但是你可以使用根据特定阈值计算的反投影来满足你对鲁棒性的需求......

朱利安,我稍后会发布,

于 2011-08-12T13:55:27.903 回答
3

当您尝试在 OpenCV 中进行阈值处理时,您是使用 RGB(红色、绿色、蓝色)还是 HSV(色相、饱和度、值)颜色格式来执行此操作的?根据个人经验,我发现 HSV 编码在与用于阈值处理的 OpenCV 和用于识别 blob 位置的 cvBlobsLib 结合使用时,在跟踪视频片段中的彩色对象方面要优越得多。

HSV 更容易,因为 HSV 的优点是只需要使用一个数字来检测颜色(“色调”),尽管该颜色有多种色调的可能性非常大,从浅色到深色。(颜色的量和颜色的亮度分别由“saturation”和“value”参数处理)。

我使用对 cvInRange() OpenCV API 的调用对 HSV 参考图像 ('imgHSV') 进行阈值化以获得二进制(黑白)图像:

cvInRangeS( imgHSV,  
            cvScalar( 104, 178, 70  ),  
            cvScalar( 130, 240, 124 ),  
            imgThresh ); 

在上面的示例中,两个 cvScalar 参数是 HSV 值的下限和上限,表示颜色为蓝色的色调。在我自己的实验中,我能够通过抓取我感兴趣的对象的屏幕截图来获得一些合适的最大/最小值,并观察发生的色调/饱和度/亮度值的种类。

可以在此博客文章中找到带有代码示例的更详细说明。

于 2011-10-13T15:39:22.647 回答
1

Andrian 有一个很酷的教程http://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/

我跟着做了一个很好的实验测试 https://youtu.be/HJBOOZVefXA

我也使用静态图像

frameDelta = cv2.absdiff(firstFrame, gray)
thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]
thresh = cv2.dilate(thresh, None, iterations=2)
(cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)

4行代码找到运动好运

于 2016-11-22T09:03:03.503 回答