2

我有一晚通过网络摄像头拍摄的静止图像。大多数是相同的,因为图像中的照明是均匀的。然而,有些与其他的有很大不同——它们在框架中具有可见的人体运动。

如何检测哪些图像明显不同,以便将运动包含在其中?更好的是,有没有专门检测运动的方法?

我猜像 OpenCV 或 SimpleCV 这样的库可以轻松完成此任务,但我不限于使用这些库。

4

3 回答 3

6

在 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 上找到它。

于 2012-07-14T09:12:28.360 回答
3

您要查找的内容称为背景减法:

图片取自网络

(图片来自这篇文章

看看这个 SO 讨论

OpenCV 中也有很多文章/示例,所以只需谷歌一下。

于 2012-07-14T09:14:00.220 回答
1

如果您拥有的第一张图像是相似的,您可以找到所有图像与第一张图像的绝对差异,并有一个阈值来找到显着不同的图像。同样在 openCV 中,为了检测视频中的运动,可以这样做: http ://sundararajana.blogspot.in/2007/05/motion-detection-using-opencv.html

于 2012-07-14T06:22:15.793 回答