比较视频和图像(差异百分比)

比较视频和图像(差异百分比)

我想知道是否可以使用以下方法获得视频和静态图像之间的差异百分比AV转换(从利巴夫

我有一个监控摄像头不断提供 RTSP 视频源。摄像机静态地指向地板。我知道一切正常时图片的样子(我有它的屏幕截图)。有没有办法,使用AV转换及其神奇的过滤器来获取屏幕截图和来自相机的视频之间的变化百分比?这会是类似的东西黑框滤镜,但我不想获得图像中“黑色”的百分比,而是想获得屏幕截图和来自相机的视频之间的差异百分比。

我知道有很多可能的警告,例如照明的变化、相机的微小移动,但是......我有点好奇。

我正在运行 Ubuntu 64 位(内核 3.8.0-29)12.04,avconv版本为 0.8.9

答案1

运动

您没有说明您尝试使用此信息执行什么应用程序,但考虑到您正在处理安全摄像头,我建议您查看一下运动包

您可以按照您要求的方式做一些事情,其中​​运动将显示参考图像和视频源之间的增量。

例子

SS #1   SS #2

AV转换

我还发现这篇博客文章讨论了一个可能对解决您的问题有用的功能。文章标题为:使用 ffmpeg (avconv) 进行场景变化检测以提取有意义的缩略图

摘抄

现在的好消息是我们可以使用自动化工具来做到这一点。 FFmpeg (avconv) 在其 libavfilter 库中拥有我们需要的所有内容,以便从视频中提取静态图像,不是每隔 x 秒,而是每次视频图像发生显着变化时(或多或少等于场景变化)。这种魔法通常被称为场景变化检测。

一种方法是让视频编解码器完成艰苦的工作。大多数编解码器采用“关键帧”识别技术,这意味着“该帧是一个新场景”(I 帧),后续图像与“主帧”相比仅略有变化,因此编解码器只能存储差异(B-帧)而不是全帧。现在,在 ffmpeg 中,Stefano Sabatini 的选择过滤器会遍历视频,并仅在遇到 I 帧/关键帧(可能是新场景的开始)时才触发相应帧的保存

    $ ffmpeg -vf “select=’eq(pict_type,I)’” -i somevideo.mp4 \
            -vsync 0 -f image2 /tmp/thumbnails-%02d.jpg

这种方法有效,但并不完美。这就是为什么 Clément Boesch 添加了 scene,一个用于选择的场景检测子过滤器。如果您的 ffmpeg 版本有此代码,您可以这样调用它:

    $ ffmpeg -vf “-vf select=’gt(scene\,0.9)’” -i somevideo.mp4 \
            -vsync 0 -f image2 /tmp/thumbnails-%02d.jpg

如果您的 ffmpeg/avconv 抱怨“‘场景’中未定义常量或缺少‘(’”,您的 libavfilter/vf_select.c 编译中可能没有场景检测代码。

边注:

如果 ffmpeg/avconv 抱怨“缺少 ')' 或…中的参数太多”,您可能使用了文档中的示例,带有转义逗号,没有引号等。请确保在引号中包含整个“filtergraph” ,就像 -vf “” 其中有我们的“select=…”内容,包括单引号。

相关内容