use*_*600 5 android opencv motion-detection
我看到与opencv运动检测相关的查询,但我的要求更简单,所以我再次提出问题.我想分析视频帧,看看帧中是否有变化.已经识别出在帧中发生的任何类型的运动.如果发生某些事情,我只是想收到通知.我不需要跟踪/绘制轮廓.
尝试:
1)使用OpenCV(TM_CCORR_NORMED)进行模板匹配.
我使用cvMinMaxLoc&获得相似性索引
if( sim_index > threshold )
"Nothing chnged"
else
"Changed
Run Code Online (Sandbox Code Playgroud)
面临的问题:
我找不到决定如何设置阈值的方法.虚假匹配和完美的价值非常接近.
2)方法2
a)使运行平均值
b)取当前帧和移动平均值之间的abs差值.
c)阈值并使其成为二进制
d)计算非零值的数量
再次坚持如何对其进行阈值处理,因为即使对于非常相似的帧,我也会获得大量的非零值.
请告诉我应该采取什么方法.我是否采用上述两种方法朝着正确的方向前进,或者是否有一种简单的方法可以在所有最通用的场景中使用.
方法 2 通常被认为是最简单的运动检测方法,如果视频中没有水、摇摆的树木或高度变化的照明条件,则方法 2 非常有效。通常你会这样实现:
motion_frame=abs(newframe-running_avg);
running_avg=(1-alpha)*running_avg+alpha*newframe;
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以对 Motion_frame 设置阈值,然后计算非零值。但您也可以只对 Motion_frame 的元素和阈值求和(确保使用浮点数)。为此优化参数非常简单,只需制作两个轨迹栏并进行操作即可。通常 alpha 约为 [0.1; 0.3]。
最后,在整个帧上执行此操作可能有点过分,您可以只使用子采样版本,结果将非常相似。
归档时间: |
|
查看次数: |
2374 次 |
最近记录: |