我有一晚通过网络摄像头拍摄的静止图像。大多数是相同的,因为图像中的照明是均匀的。然而,有些与其他的有很大不同——它们在框架中具有可见的人体运动。
如何检测哪些图像明显不同,以便将运动包含在其中?更好的是,有没有专门检测运动的方法?
我猜像 OpenCV 或 SimpleCV 这样的库可以轻松完成此任务,但我不限于使用这些库。
我有一晚通过网络摄像头拍摄的静止图像。大多数是相同的,因为图像中的照明是均匀的。然而,有些与其他的有很大不同——它们在框架中具有可见的人体运动。
如何检测哪些图像明显不同,以便将运动包含在其中?更好的是,有没有专门检测运动的方法?
我猜像 OpenCV 或 SimpleCV 这样的库可以轻松完成此任务,但我不限于使用这些库。
在 SimpleCV 中,
cam = Camera()
prev = cam.getImage()
while True:
current = cam.getImage()
fs = current.findMotion(prev, method="LK")
if fs: #if there's motion
print "motion found"
prev = current
Image.findMotion()
使用光流检测运动。你可以很容易地使用它。添加一些关于您期望多少运动的条件。
fs.dx
并将fs.dy
为您提供检测到运动的所有点。
我举了一个例子,我从相机获取输入并通过检测水平和垂直运动来控制 Banshee 媒体播放器。你可以在我的GitHub 上找到它。
如果您拥有的第一张图像是相似的,您可以找到所有图像与第一张图像的绝对差异,并有一个阈值来找到显着不同的图像。同样在 openCV 中,为了检测视频中的运动,可以这样做: http ://sundararajana.blogspot.in/2007/05/motion-detection-using-opencv.html