【问题标题】:Detect the sequence of blinking lights检测闪烁灯的顺序
【发布时间】:2013-07-26 09:44:40
【问题描述】:

我正在寻找一个例子或只是一个起点来实现以下目标:

使用 Python openCV 我想检测闪烁灯的顺序。即 on off on off = 匹配

这可能吗?有人可以先给我看一个简单的例子。我希望我能从中学到东西。我通过示例学习得更好,找不到任何实现排序此功能的方法。

【问题讨论】:

  • 你能提供一个示例视频来展示输入的样子吗?
  • @sietschie 我还不能,但想象一下相机正看着一个大电视屏幕,它在电视屏幕上闪烁……白色、黑色、白色。我希望打开 CV 来检测此功能的开、关、开。
  • 如果光线覆盖了足够大的图像区域,您可以使用图像的平均强度。如果你得到了一系列图像,你只需要寻找亮度的突然变化,这很可能意味着光线发生了变化。

标签: python opencv python-2.7


【解决方案1】:

如果光源在您的图像中非常突出,您可以使用图像的平均强度来检测变化。

这是一个非常简单的例子。我使用this 视频进行测试。 您可能需要调整视频的阈值。

如果您的视频不像我用于测试的视频那么简单,您可能需要进行一些调整。例如,如果图像的其他部分有太多干扰,您可以先尝试分割光源。或者如果连续图像之间的强度变化不够大,您可能需要查看多张图像的变化。

编辑:

我刚刚看到这个问题是用 python 标记的,但我的源代码是 C++。但我暂时离开它。也许它可以帮助您了解总体思路,以便您可以自己将其移植到 python。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;

int main(int argc, char** argv)
{
    VideoCapture capture(argv[1]);
    Mat frame;

    if( !capture.isOpened() )
        throw "Error when reading video";

    double lastNorm = 0.0;
    int lastCounter = 0;
    int counter = 0;
    int currentState = 0;

    namedWindow( "w", 1);
    for( ; ; )
    {
        capture >> frame;
        imshow("w", frame);


        double currentNorm = norm(frame);
        double diffNorm = currentNorm - lastNorm;

        if (diffNorm > 20000 && currentState == 0)
        {
            currentState = 1;
            std::cout << "on  - was off for " << counter - lastCounter << " frames" << std::endl;
            lastCounter = counter;
        }
        if (diffNorm < -20000 && currentState == 1)
        {
            currentState = 0;
            std::cout << "off - was on  for " << counter - lastCounter << " frames" << std::endl;
            lastCounter = counter;
        }

        waitKey(20); // waits to display frame

        lastNorm = currentNorm;
        counter++;
    }
    waitKey(0); // key press to close window
    // releases and window destroy are automatic in C++ interface
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 2018-09-26
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多