你知道有什么来源与背景减去从移动的相机吗?我想写类似的东西。http: /vimeo.com72577177
有很多关于静止背景的移动检测的资料,但我找不到任何移动背景的代码样本。
编辑:我想到了光流,通过检测最大数量的相似向量来去除背景。能不能这么简单?
这里有两篇关于这个主题的研究文章。
Mittal, A. et D. Huttenlocher. 2000,"Scene modeling for wide area surveillance andimage synthesis" in Proceedings of the IEEE Conference on Computer Vision andPattern Recognition (PDF)
Hayman, E. et J. Eklundh. 2003,"Statistical background subtraction for a mobile obser-ver",in Proceedings of the IEEE International Conference on Computer Vision. (PDF)
要实现这个视频并不难。因为移动的物体很小,背景是静止的,虽然摄像机是缓慢移动的。
首先,确定连续帧之间的运动矢量。例如,t-1帧中(100,100)处的像素在t帧中移动到(103,102)处,由于背景的大部分部分都是静态的,所以可以确定一个常用的运动矢量来描述大部分像素的运动。
其次,使用RANSAC或其他一些算法,根据运动矢量找到不运动的像素。这些像素代表运动的物体。
你提到的链接更像是对象跟踪。但如果你想用opencv来应用移动背景减法,那就容易多了。它的工作原理更像是一个运动跟踪器。
这是代码。
import cv2
import numpy as np
cap = cv2.VideoCapture("input.mp4")
out = cv2.createBackgroundSubtractorMOG2()
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
output = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480), isColor=False)
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
frame = cv2.flip(frame,180)
outmask = out.apply(frame)
output.write(outmask)
cv2.imshow('original', frame)
cv2.imshow('Motion Tracker', outmask)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
output.release()
cap.release()
cv2.destroyAllWindows()
这段代码可以让你在视频文件中应用背景减法并保存起来