2009-09-01 432 views
10

我有一个视频源。此视频供稿包含多个以不同速率闪烁的指示灯。所有的灯都是相同的颜色(它们都是红外LED)。我如何检测这些闪烁灯的位置和频率?OpenCV:检测视频中闪烁的灯光

声明:我是极其新的OpenCV。我有一个的副本学习OpenCV,但我觉得它有点压倒性。如果有人能够用OpenCV术语解释解决方案,那将不胜感激。我不希望代码为我写。

回答

8

阈值序列中的每个图像的阈值使LED可见。如果您可以将阈值设为阈值,那么只有可以保留LED并消除背景,因此您现在需要完成的操作是跟踪每个已经看到LED的位置并统计其发生频率。

作为一个中间步骤,如果有“背景噪音”的阈值的图像中是使用的侵蚀,以除去小错误,然后可能扩张到“关洞”中的斑点你是真正感兴趣。

如果场景是静态的,也可以通过取几帧的中间值并从任何帧和阈值中去除得到的中值图像来制作一个简单的背景模型。已经改变的东西(你的LED)会变得更强。

如果场景正在移动,我看不出其他(简单)解决方案,而不是确保LED足够亮以便能够使用上面给出的阈值方法。

至于OpenCV:如果你知道你想要做什么,找到一个实现它的函数并不是很难。困难的部分是想出一个解决问题的方法,而不是实际的编码。

+0

非常感谢你的提示!这一定会有所帮助! – 2009-09-02 12:23:50

1

如果LED是静止的,问题比移动时要简单得多。假设它们是静止的,找到频率的解决方案可能仅仅是为每个像素位置保存一个向量或阵列,在该位置中存储该像素的值,最好在经过kigurai描述的预处理之后,在一段时间内完成。然后,您可以计算这些值向量的一维傅里叶变换,并找到接地频率作为DC峰值之后的第一个重要分量。如果DC峰值太低,则意味着没有领先。

希望这个问题仍然有些实际,而且我的解决方案很有意义。

+1

不是说你的回答是错误的,而是为了找到眨眼的频率,我认为傅里叶变换可能是矫枉过正的。简单地计算帧数“关”和帧数“开”应该给我足够好的结果,尽管这取决于信号的“干净”程度。 – 2010-01-19 15:52:17