2012-01-16 342 views
9

我的問題是,類似這樣的: OpenCV: Detect blinking lights in a video feedOpenCV的檢測閃爍的燈光

我有一個LED燈,和我的相機以30fps運行。在每一幀,我都知道燈是否亮。與上一個問題類似,我也想獲得該點的位置。

我現在不知道如何使用OpenCV進行這種情況下(我是新的)。如果光線只是一個像素,那很容易,但是如果背景噪音和LED的尺寸相當大,我怎麼才能檢測出圖像中最大的光源。我必須假設我無法自由設置曝光(在iPhone上)。

我是新來的圖像處理,所以我會怎麼做呢?

回答

6

如果背景只是嘈雜,但不會改變這麼多,你可以你backgroudn減法:

你有2幀,和你做式2-幀1,那麼您應用閾值(閾值取決於LED的強度,因此您應該對其進行測試),並且您設置黑色低於閾值的像素,並將高於閾值的像素白化。

如果轉換的一個灰度圖像,這是很容易的。

應somenthign這樣的:

cvAbsDiff(img2, img1, img2); 
cvThreshold(img2, img2, (double)threshold_value, 255 (if you are using an rgb image), CV_THRESH_BINARY); 

如果指示燈熄滅,你應該罰款只是噪音,而如果你是領導你會希望尋找到你的光illuminting白色區域。

+0

我的意思是說,光線本身可能不是唯一的白色區域。我做了cVthreshold,但問題是要設置閾值。這就是爲什麼我的問題是檢測到最大的(區域方面)光源,因爲可能有更多的光源。 openCV中是否有這樣的功能來執行這種「對象」檢測? – nambrot 2012-01-16 20:57:41

+0

好吧,你可以嘗試,在閾值之後,申請cvfindcontours。它返回所有白色區域的輪廓列表(輪廓是cvpoints列表)。用這個你可以找到輪廓點多的區域,有一個函數來計算區域double contourArea(const Mat&contour),所以你可以看到最大的白色區域(如果大於你可以假設的某個值是) – andrea 2012-01-16 22:01:08

+0

謝謝,這對我有很大的幫助。我會盡力實現這一點。同時你得到這個問題:) – nambrot 2012-01-19 03:51:40

1

我想你不能只是在。減去兩個圖像來消除噪聲,因爲總有一些運動用相機....它不能平穩.....所以ü最終使一個爛攤子,而不是.. 。

我的通話是使用「INRANGE」功能,如果像素完全明亮,即255或上面說的200,離開它,因爲它是否則只是使它零.....所以你最終只導致的部分...背景消失了!