我的问题与此类似: OpenCV: Detect blinking lights in a video feed
我有一盏LED灯,我的相机以30fps的速度运行。在每一帧,我都知道灯是否亮了。与前一个问题类似,我也希望获得该点的位置。
我现在想知道如何在这个实例中使用openCV(我是新手)。如果光只是一个像素就很容易,但是由于相当大的背景噪声和LED的大小,我如何检测图像中最大的光源。我必须假设我无法自由设置曝光(在iPhone上)。
我是图像处理的新手,所以我该怎么做呢?
答案 0 :(得分:6)
如果背景只是嘈杂,但没有那么大的改变,你可以减去背景:
你有2帧,你做Frame2-Frame1,然后你应用一个阈值(阈值的值取决于LED的强度,所以你应该测试它),你设置为黑色的像素低于阈值和白色高于阈值的像素。
如果您将图像转换为灰度图像,这非常容易。
应该是这样的:
cvAbsDiff(img2, img1, img2);
cvThreshold(img2, img2, (double)threshold_value, 255 (if you are using an rgb image), CV_THRESH_BINARY);
如果您的LED指示灯熄灭,您应该只是噪音,而如果您打开了指示灯,则可能会发现一个白色区域,您的指示灯会亮起。
答案 1 :(得分:1)
我猜你不能只是减去这两个图像以消除噪音,因为相机总会有一些动作......它不能稳定.....所以你最终弄得一团糟......
我的呼叫将使用“inrange”功能,如果一个像素是完全明亮的,即255或200以上,请保持原样,否则只需将其设为零.....所以你最终得到的只是led部分...背景消失!!