从一组图像中检测明显不同的图像,例如使用 OpenCV 或 SimpleCV

Posted

技术标签:

【中文标题】从一组图像中检测明显不同的图像,例如使用 OpenCV 或 SimpleCV【英文标题】:Detect significantly distinct image from a set, such as with OpenCV or SimpleCV 【发布时间】:2012-07-14 05:57:38 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

在 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.dxfs.dy 将为您提供检测到运动的所有点。

我做了一个例子,我从摄像头获取输入并通过检测水平和垂直运动来控制 Banshee 媒体播放器。您可以在我的GitHub 上找到它。

【讨论】:

【参考方案2】:

你要找的东西叫做背景减法:

(图片取自this article)

看看this SO discussion。

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

【讨论】:

【参考方案3】:

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

【讨论】:

感谢您的回答。您是否有用于查找两个图像之间的绝对差异的代码示例?谢谢! 在 openCV 中,你必须先为图像声明 2 个矩阵,将图像转换为灰度,然后才能使用 absdiff() 函数。您可以查看 developerstation.org/2011/03/… 以获取相同的示例。

以上是关于从一组图像中检测明显不同的图像,例如使用 OpenCV 或 SimpleCV的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的机器人从一组图像中选择一个随机图像

使用 SIFT/SURF 从一组图像中检索相似图像

如何以编程方式在 Fabric.js 呈现的一组图像中选择一个图像

哪些算法或方法可用于从图像中识别对象

我将如何编写一个嵌入代码,从我有 URL 的一组图像中提供一个随机图像? (不和谐.py)

为 SKSpriteNode 选择随机图像