Pregunta

Quiero realizar un seguimiento de un punto de luz láser (que se encuentra en una pared) con una cámara web y estoy usando OpenCV para realizar esta tarea. ¿Alguien puede sugerir una manera de hacerlo con C ++.

Gracias!

¿Fue útil?

Solución

Hay tres opciones dependiendo de la estabilidad de sus antecedentes, y las cosas que quiere hacer con la imagen.

Se puede hacer que su imagen tan oscura que lo único que se puede ver es el láser de punto. Usted puede hacer esto mediante el cierre del diafragma y / o reducir el tiempo de obturación. Incluso con webcams baratas esto por lo general se puede hacer en el controlador. Una vez que haya hecho esto la tarea de encontrar el punto láser es muy fácil. Haces que la imagen lo más oscuro posible, porque por lo general el punto en el que brilla el láser es demasiado brillante para la cámara para recoger. Esto significa (como usted ha experimentado) que no se puede discernir entre el punto de luz láser y otros objetos de luz en la imagen. Por lo que es más oscuro que ahora puede hacer esto.

Si usted tiene otros usos para su imagen (mostrando a la gente) y su fondo es estable también puede utilizar el promedio de los últimos imágenes de vídeo como un "fondo" y luego encontrar el punto donde hay una gran diferencia entre ese fondo y la imagen más reciente. Esto es por lo general cuando el láser es puntiaguda (de nuevo, si el fondo es lo suficientemente estable).

Por último, si el fondo no es estable y que no quieren que su imagen muy oscura La última opción es la búsqueda de todos los píxeles que son a la vez muy brillante, y más brillante en el canal rojo de lo que son en verde y azul (si está utilizando un láser rojo). Este sistema todavía será distraído por manchas blancas, pero no tanto como simplemente encontrar los píxeles brillantes. Si el centro de su lugar de puntero láser es, en efecto apareciendo como el blanco brillante, independientemente del color de láser entonces, esta técnica le permitirá encontrar "anillos" alrededor de este punto brillante (la parte externa del punto en el que el láser no es tan brillante como que está en el centro de modo que aparece con el color real del láser en la imagen). A continuación, puede utilizar simples morfológica operaciones , (probablemente cerrando es suficiente) para llenar estos círculos.

Otros consejos

Digamos que utiliza un láser de uno de estos colores: rojo, verde, azul. Si el punto láser aparece muy brillante (al menos en un canal, por ejemplo rojo) a continuación, simplemente umbralización de la imagen / canal en, digamos greyvalue de 200, le dejará con unos pocos candidatos para la luz láser. Si los otros canales son de color oscuro (er) en esta área, entonces usted sabe que es una luz brillante del color correcto. Un poco filtrar por tamaño, y tiene una buena oportunidad de encontrar el lugar.

Si usted se pega un filtro de infrarrojos de la cámara web, su proyección no se recogió, por lo que la detección del punto láser mucho más fácil (con fondo simple resta, etc) esto es suponiendo que el puntero láser emite luz IR ...

Como se sugiere en otras respuestas, en busca de que el color podría ser una buena idea. Usted debe considerar al buscar un rango específico de color. La mejor manera de hacerlo es convertir la imagen a HSL o HSV espacio de color.

cv::cvtColor(src, hsv, COLOR_BGR2HSV);

Más información sobre Wikipedia .

A continuación, tiene tres canales: tono (= color), saturación y luminosidad (o valor).

Con cv::inRange(hsv, cv::Scalar(159, 135, 165), cv::Scalar(179, 255, 200), inRange); ahora se puede generar una imagen en blanco y Negro, que muestra qué píxeles están en la gama de colores. Los escalares son los valores bajo y alto de cada canal.

En este ejemplo, usted obtendrá píxeles con un color entre 159 y 179 (tono), la saturación de entre 135 y 255 y valor entre 165 y 200.

Tal vez esto puede mejorar su seguimiento.

¿Qué hay de este código

https://www.youtube.com/watch?v=MKUWnz_obqQ

https://github.com/niitsuma/detect_laser_pointer

En este código, observado color HSV se compara con color registrado utilizando la prueba t cuadrado de Hotelling

Plantilla tratar Maching. En primer lugar, "señala el puntero" a un lugar específico por lo que el templo se puede hacer. A continuación, sólo lo busca.

O, como Jilles de Wit, dijo, se puede tomar la diferencia de los últimos 2 marcos, probablemente, la diferencia le mostrará el puntero.

Convertir los últimos 2 cuadros hacen escala de grises, a continuación, aplicar la función SUB.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top