【发布时间】:2012-12-08 08:36:18
【问题描述】:
我看到与 opencv 运动检测相关的查询,但我的要求要简单得多,所以我再次问这个问题。 我想分析视频帧,看看帧中是否发生了变化。帧中发生的任何类型的运动都已被识别。我只想在有事情发生时得到通知。我不需要跟踪/绘制轮廓。
尝试过:
1) 使用 OpenCV (TM_CCORR_NORMED) 进行模板匹配。
我使用 cvMinMaxLoc & 得到相似度指数
if( sim_index > threshold )
"Nothing chnged"
else
"Changed
面临的问题:
我找不到决定如何设置阈值的方法。 false match 和 perfect 的值非常接近。
2) 方法2
a) 使运行平均
b) 取当前帧与移动平均之间的绝对差值。
c) 阈值化并使其二进制
d) 计算非零值的数量
再次陷入如何对其进行阈值处理,因为即使对于非常相似的帧,我也会得到大量非零值。
请告诉我应该采取什么方法。我是否使用上述两种方法朝着正确的方向前进,或者是否有一种简单的方法可以适用于所有最通用的场景。
【问题讨论】:
-
如果 TM_CCORR_NORMED 等价于 Pearson 相关系数,那么根据修改帧的方式,您将很难确定此方法的良好阈值,因为没有好的阈值。但是你没有清楚地说明你在第一种方法中做了什么。您是否将初始帧设置为基本帧,然后将每个新帧与其进行比较?然后,如果
sim_index低于threshold,则将此新帧标记为基础帧。重复。那是你的方法吗?
标签: android opencv motion-detection