Opencv python背景减法和行动跟踪

时间:2017-04-18 07:43:37

标签: python c++ opencv motion-detection background-subtraction

我在google上阅读了关于opencv的内容,并在网上找到了以下示例代码:

import cv2

def diffImg(t0, t1, t2):
  d1 = cv2.absdiff(t2, t1)
  d2 = cv2.absdiff(t1, t0)
  return cv2.bitwise_and(d1, d2)

cam = cv2.VideoCapture('vid1.mp4')

winName = "Movement Indicator"
cv2.namedWindow(winName, cv2.CV_WINDOW_AUTOSIZE)

# Read three images first:
t_minus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
t = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)

while True:
  cv2.imshow( winName, diffImg(t_minus, t, t_plus) )

  # Read next image
  t_minus = t
  t = t_plus
  t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)

  key = cv2.waitKey(10)
  if key == 27:
    cv2.destroyWindow(winName)
    break

print "Goodbye"

它为我提供的示例视频产生以下类型的输出:opencv image difference frame output

所以我用这个脚本得到了这样的结果。现在我想弄清楚的是 - 1)获取视频文件中移动对象的边界矩形 2)将该边界矩形的内容从原始视频帧复制到另一个,并将完成的视频写入文件

此外,在下面的屏幕截图中尝试使用Kanishak Katahra的解决方案我在右侧的结果窗口中获得以下输出 -

1 个答案:

答案 0 :(得分:0)

  

将您获得的输出中的兴趣点设为1。将其余部分设为0。   将其转换为与原始图像大小相同的3D数组。   将原始图像与您获得的输出相乘。

g++ --std=c++11 [files] -lssl