2012-01-16 14 views
9

la mia domanda è simile a questa: OpenCV: Detect blinking lights in a video feedOpenCV rilevare luci lampeggianti

Ho una luce a LED, e la mia macchina fotografica gira a 30fps. Ad ogni fotogramma, sono pronto per sapere se la luce è accesa o no. Simile alla domanda precedente voglio anche ottenere la posizione di quel punto.

Ora mi chiedo come utilizzare openCV per questa istanza (sono nuovo). Sarebbe facile se la luce fosse solo un pixel, ma dato il rumore di fondo considerevole e la dimensione del LED, come posso rilevare la più grande fonte di luce nell'immagine. Devo supporre che non posso impostare liberamente l'esposizione (su un iPhone).

Sono nuovo nell'elaborazione delle immagini, quindi come dovrei farlo?

risposta

6

se lo sfondo è solo rumoroso, ma non cambia così tanto si può si sottrazione backgroudn:

hai 2 fotogrammi, e si fa Frame2-Frame1, quindi si applica una soglia (il valore della soglia dipende dall'intensità del LED, quindi dovresti testarlo) e hai impostato il nero dei pixel inferiori alla soglia e il bianco dei pixel più alto della soglia.

questo è molto facile se si converte l'immagine in una scala di grigi.

dovrebbe essere somenthign come questo:

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

se il led è spento si dovrebbe bene solo rumore, mentre se si è portato su di voi si aspetta di trovare una regione bianca dove la tua luce è illuminting.

+0

quello che intendo per rumore è che la luce stessa potrebbe non essere l'unica regione bianca. Ho fatto cVthreshold, ma la domanda è solo su cosa impostare il valore di soglia. Ecco perché la mia domanda era la rilevazione della più grande fonte di luce (area-wise), dal momento che potrebbero essercene più di una. Ci sono funzioni in openCV che eseguono questo tipo di rilevamento di "oggetti"? – nambrot

+0

bene si può provare, dopo la soglia, per applicare cvfindcontours. restituisce una lista dei contorni di tutte le regioni bianche (contorno è una lista di punti cv). con questo puoi cercare la regione con i contorni con più punti, c'è una funzione per calcolare l'area double contourArea (const Mat e contorno) in modo da poter guardare la più grande regione bianca (se maggiore di un certo valore si può supporre led è attivo) – andrea

+0

grazie, questo ha aiutato molto. Proverò a implementarlo in questo modo. Nel frattempo si ottiene la domanda :) – nambrot

1

Immagino che non puoi semplicemente sottrarre le due immagini per rimuovere il rumore, perché c'è sempre un po 'di movimento con la fotocamera .... non può essere costante ..... quindi finisci per fare un casino, invece ..

La mia chiamata verrebbe utilizzata con la funzione "inrange", se un pixel è completamente luminoso, ovvero 255 o si dice superiore a 200, lasciarlo come è altrimenti basta renderlo zero ..... quindi si finisce con la parte a led ... sfondo andato !!

Problemi correlati