2012-01-16 17 views
9

mi pregunta es similar a éste: OpenCV: Detect blinking lights in a video feedOPENCV detectar luces parpadeantes

que tienen una luz LED, y mi cámara corre a 30 fps. En cada cuadro, deseo saber si la luz está encendida o no. Al igual que en la pregunta anterior, también quiero obtener la ubicación de ese punto.

Ahora me pregunto cómo usar openCV para esta instancia (soy nuevo). Sería fácil si la luz fuera solo un píxel, pero dado el considerable ruido de fondo y el tamaño del LED, ¿cómo puedo detectar la mayor fuente de luz en la imagen? Tengo que asumir que no puedo configurar la exposición libremente (en un iPhone).

Soy nuevo en el procesamiento de imágenes, así que ¿cómo lo conseguiría?

Respuesta

6

si el fondo es sólo ruido, pero no cambia mucho lo que puede que resta backgroudn:

tiene 2 marcos, y lo hace Frame2-Frame1, a continuación, aplicar un umbral (el valor del umbral depende de la intensidad del LED, por lo que debe probarlo), y configurará en negro los píxeles inferiores al umbral y en blanco los píxeles superiores al umbral.

esto es muy fácil si convierte su imagen en escala de grises.

debe somenthign así:

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

si su LED está apagado se debe ajustar con sólo ruido, mientras que si el led está encendido usted esperar encontrar una región blanca donde su luz se illuminting.

+0

lo que quiero decir con ruido es que la luz en sí misma podría no ser la única región blanca. Hice cVthreshold, pero la pregunta es a qué establecer el valor de umbral. Es por eso que mi pregunta fue la detección de la fuente de luz más grande (en el área), ya que podría haber más de ellos. ¿Hay funciones en openCV que realicen ese tipo de detección de "objetos"? – nambrot

+0

bien puede intentar, después del umbraling, aplicar cvfindcontours. devuelve una lista de los contornos de todas las regiones blancas (el contorno es una lista de cvpoints). con esto puede buscar la región con los contornos con más puntos, hay una función para calcular el área de contorno doble de área (const Mat y contorno) para que pueda buscar la región blanca más grande (si es mayor que un cierto valor puede suponer led está encendido) – andrea

+0

gracias, eso ayudó mucho. Trataré de implementarlo de esa manera. Mientras tanto, obtiene la pregunta :) – nambrot

1

Supongo que no se puede restar las dos imágenes para eliminar el ruido, porque siempre hay algún movimiento con la cámara ... no puede ser constante ..... por lo que terminan haciendo un lío en su lugar ...

Mi llamada sería usar la función "inrange", si un píxel es completamente brillante, es decir, 255 o más de 200, déjalo como está, simplemente hazlo cero ..... por lo que terminas con solo la parte conducida ... ¡el fondo se ha ido!

Cuestiones relacionadas