从一组图像中检测明显不同的图像,例如使用 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.dx
和 fs.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的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式在 Fabric.js 呈现的一组图像中选择一个图像