【问题标题】:Detect a frame with OpenCV使用 OpenCV 检测帧
【发布时间】:2015-10-31 04:53:57
【问题描述】:

我有一个预定义的参考视频帧,我想在大量视频文件中检测它。我根据参考帧测试每个视频帧,但我不确定什么是最好的算法。

目前我正在使用 matchTemplate / TM_CCOEFF,它有点工作,但有点奇怪。这是一个 1:1 的匹配,所以我得到一个 1x1 的结果,其中的数字非常大(大于 MAX 整数)。很难设置任何阈值(我需要容忍质量较差的视频),因为这个数字是任意的。

我想知道是否有更好的方法,或者我只是以错误的方式使用它?

// 编辑 OK,我认为阈值的问题是我对双精度值的错误解释,TM_CCOEFF_NORMED 返回 0.0-1.0 值。

【问题讨论】:

  • 框架一模一样吗?如果是这样,只需将参考帧与其他帧的绝对差值相加即可。价值 0 胜!
  • 嗯,这就是框架不完全一样的东西。候选视频可能会受到压缩伪影的污染,甚至可能稍作修改(少量像素裁剪等)
  • 如果大小相同,我仍然会尝试这种简单的方法。现在最低值获胜.. :D
  • 我会试一试。你知道是否有一个函数可以总结图像中的所有像素。同样在类似的注释中,是否有一个函数可以获取矩形中的像素总和?
  • 标量 s = sum(img(rect));

标签: opencv


【解决方案1】:

好吧,为了处理压缩伪影和其他事情,我不得不说减法方法并不像许多人想象的那么好。当由于压缩导致图像对比度出现噪声和变化时,最好使用更强大的方法,例如相关方法,它可能会在时间上有点昂贵,但更精确。我使用了ZNCC(零均值互相关),它工作得很好,我在运动检测中使用它假设相机是固定的,它工作得很好。

您可以做一些事情来降低使用积分图像的计算成本,这里是example。另外我建议使用较低分辨率的图像来更快地完成它,并且不会那么糟糕,因为这种方法对某些变化和噪声非常稳健。最后,您可以通过查看视频帧中的最高相关系数来跟踪您想要的帧。

【讨论】:

  • 想了解Integral Images可以点击here
猜你喜欢
  • 2014-06-30
  • 2018-06-16
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 2013-03-31
  • 1970-01-01
  • 2014-06-27
相关资源
最近更新 更多