OpenCV:检测视频源中的闪烁灯
Posted
技术标签:
【中文标题】OpenCV:检测视频源中的闪烁灯【英文标题】:OpenCV: Detect blinking lights in a video feed 【发布时间】:2010-11-24 19:31:41 【问题描述】:我有一个视频源。此视频源包含几个以不同速率闪烁的灯。所有灯的颜色都相同(它们都是红外 LED)。如何检测这些闪烁灯的位置和频率?
免责声明:我是非常 OpenCV 新手。我确实有一份Learning OpenCV 的副本,但我觉得它有点压倒性。如果有人可以用 OpenCV 术语解释解决方案,将不胜感激。我不希望为我编写代码。
【问题讨论】:
【参考方案1】:使用使 LED 可见的阈值对序列中的每个图像进行阈值处理。如果您可以使用 仅 保持 LED 并移除背景的阈值对其进行阈值化,那么您或多或少地完成了,因为您现在需要做的就是跟踪看到 LED 的每个位置,并且计算它发生的频率。
作为中间步骤,如果阈值图像中存在“背景噪声”,则可以使用腐蚀来消除小错误,然后可能会扩大以“关闭”您真正感兴趣的斑点中的孔。
如果场景是静态的,您还可以通过获取几帧的中值并从任何帧和阈值中移除生成的中值图像来制作简单的背景模型。发生变化的东西(你的 LED)会显得更强。
如果场景在移动,除了确保 LED 足够亮以能够使用上面给出的阈值方法之外,我认为没有其他(简单的)解决方案。
至于 OpenCV:如果你知道你想做什么,那么找到一个功能来做这件事并不难。困难的部分是想出解决问题的方法,而不是实际的编码。
【讨论】:
非常感谢您的提示!这肯定会有所帮助!【参考方案2】:如果 LED 是静止的,则问题比它们移动时要简单得多。假设它们是静止的,找到频率的解决方案可能只是为存储该像素值的每个像素位置保留一个向量或一个数组,最好是在 kigurai 描述的预处理之后,在某个时间范围内。然后,您可以计算这些值向量的一维傅立叶变换,并找到地面频率作为直流峰值之后的第一个重要分量。如果直流峰值过低,说明那里没有led。
希望这个问题仍然有些实际,并且我的解决方案是有意义的。
【讨论】:
并不是说您的答案是错误的,而是要找到闪烁 LED 的频率,我认为傅立叶变换可能是矫枉过正。我认为简单地计算“关闭”的帧数和“开启”的帧数应该会给出足够好的结果,尽管这取决于信号的“干净”程度。以上是关于OpenCV:检测视频源中的闪烁灯的主要内容,如果未能解决你的问题,请参考以下文章
哪种使用 OpenCV 的对象检测方法最适合不断变化的环境?