具有跟踪功能的Opencv Motion检测

时间:2011-08-11 02:35:09

标签: opencv motion-detection object-detection background-subtraction

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

3 个答案:

答案 0 :(得分:3)

强大的跟踪方法是世界各地正在开发的广泛研究兴趣的一部分...... 这里可能是解决你的问题的关键,这个问题很有意思,但却很开放。

首先,他们中的许多人都认为亮度恒定(因此你要求很难实现)。例如:

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

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

然后其他有趣的可能是平移或camshift跟踪,但你需要一个投影跟随......但你可以使用相应的反投影计算某个阈值,以满足你对稳健性的需求......

我稍后会发布这个, 于连

答案 1 :(得分:3)

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

HSV更容易,因为HSV的优势在于只需要使用单个数字来检测颜色(“色调”),尽管很可能存在多种颜色的颜色,从浅到深色调。 (颜色的数量和颜色的亮度分别由“饱和度”和“值”参数处理)。

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

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

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

可以在此blog posting上找到有关代码示例的更详细说明。

答案 2 :(得分: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行代码可以很好地找到动作 祝你好运