代码之家  ›  专栏  ›  技术社区  ›  Adam Paynter

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

  •  11
  • Adam Paynter  · 技术社区  · 16 年前

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

    极其 OpenCV的新功能。我确实有一份 学习OpenCV ,但我觉得这有点难以承受。如果有人能用OpenCV术语解释解决方案,我们将不胜感激。我不希望为我编写代码。

    2 回复  |  直到 12 年前
        1
  •  11
  •   Hannes Ovrén    16 年前

    阈值序列中的每个图像都有一个使LED可见的阈值。如果你能用一个临界值来设定它 保持LED并移除背景,这样您就差不多完成了,因为您现在需要做的就是跟踪看到LED的每个位置,并计算它出现的频率。

    作为中间步骤,如果阈值图像中存在“背景噪声”,则可以使用腐蚀来消除小错误,然后可能会扩大到“闭合”您实际感兴趣的斑点中的孔。

    如果场景是静态的,您还可以通过取几帧的中间值,并从任何帧和阈值中删除生成的中间值图像,来创建简单的背景模型。改变了的东西(你的LED)会更亮。

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

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

        2
  •  1
  •   David Van Hamme    16 年前

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