OpenCV:检测视频中的闪烁灯光

13

我有一个视频源,其中包含几个以不同速率闪烁的灯。所有灯的颜色都相同(它们都是红外LED)。如何检测这些闪烁灯的位置和频率?

声明:我对OpenCV非常陌生。我有一本《学习OpenCV》的书,但我发现它有点难以理解。如果有人能用OpenCV术语解释一种解决方案,我将不胜感激。我并不期望有人为我编写代码。

2个回答

12

使用使LED可见的阈值对序列中的每个图像进行阈值处理。如果您可以使用仅保留LED并消除背景的阈值进行阈值化处理,那么您就完成了大部分工作,因为现在您只需要跟踪每个看到LED的位置并计算它出现的次数。

作为中间步骤,如果阈值化图像中存在"背景噪声",可以使用腐蚀来消除小错误,然后可能进行膨胀以"闭合"实际感兴趣的斑块中的空洞。

如果场景是静态的,您还可以通过取几帧的中位数并从任何帧中删除所得到的中位数图像来创建一个简单的背景模型,并对其进行阈值处理。已更改的内容(您的LED)将显示得更强。

如果场景正在移动,我没有其他(容易的)解决方案,除了确保LED足够亮以便能够使用上述阈值法。

至于OpenCV:如果您知道要做什么,找到执行此操作的函数就不是很难。困难的部分是提出解决问题的方法,而不是实际编码。


非常感谢您的建议!这肯定会有所帮助! - Adam Paynter

1
如果LED灯是静止的,那么问题就比它们在移动时简单得多。假设它们是静止的,找到频率的解决方案可以简单地为每个像素位置保留一个向量或数组,在kigurai所描述的预处理之后,最好在一段时间内存储该像素的值。然后,您可以计算这些值向量的1D傅里叶变换,并在DC峰值之后找到地面频率作为第一个显著的分量。如果DC峰值太低,则表示那里没有LED灯。

希望这个问题仍然有点实际意义,并且我的解决方案是有意义的。


1
不是说你的答案有错,但是为了找到闪烁LED的频率,我认为傅里叶变换可能过于复杂了。只需计算“关掉”的帧数和“开启”的帧数即可得出足够准确的结果,虽然这取决于信号的“清晰度”如何。 - Hannes Ovrén

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接