5

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

回答

3

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

首先,它们中的很多都假定亮度恒定(因此你所要求的难以达到)。例如:

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

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

然后其他有趣的东西可以均值漂移或CAMSHIFT跟踪,但你需要一个投影跟着......但是你可以用一个背投影相应计算,以一定的阈值,以适合稳健您的需求...

我会稍后发布, Julien,

3

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

单纯疱疹病毒比较容易,因为单纯疱疹病毒的优点是只需使用单一数字来检测色彩(“色调”),尽管这种颜色具有多种色调的真实可能性,从光到更深的色调。 (颜色的数量和颜色的亮度分别由“饱和度”和“数值”参数处理)。

我阈值HSV参考图像(“imgHSV”),以获得使用呼叫到cvInRange()的OpenCV API二进制(黑色和白色)图像:

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

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

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

1

安德里安有一个很酷的教程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行代码中找到运动以及 好运