7
votes

Détection de lumière laser avec OpenCV et C ++

Je veux suivre un point de lumière laser (qui est sur un mur) avec une webcam et j'utilise OpenCV pour faire cette tâche. Quelqu'un peut-il me suggérer un moyen de le faire avec C ++?

Merci!


5 commentaires

Est-il possible d'utiliser une sorte de filtre devant la webcam si oui quels sont ces filtres?


Le fait que la source de lumière soit un laser réellement important pour vous ou utilisez-vous simplement une façon parce que c'est un moyen pratique de faire un point brillant? C'est-à-dire que vous avez des raisons de prendre soin de savoir que la source est monochromatique et une phase correspondante? Si oui, quelles sont les propriétés optiques de la surface que le point est projeté sur (planéité, etc ...)?


Pouvez-vous simplement numériser l'image pour une petite zone avec un composant rouge visiblement intensifié la comparaison de la zone voisine?


@Dialecticus: Notez que les lasers de diode de cheep sont disponibles dans une variété de couleurs maintenant. Donc, S / ROUGE / YOU COULEUR / .


@dmckee: J'ai un mur et j'ai projeté mon ordinateur à ce mur et je veux filtrer le point laser (lorsque je pointe un point laser à celui-ci) de cette surface.


6 Réponses :


4
votes

Disons que vous utilisez un laser d'une de ces couleurs: rouge, vert, bleu. Si le point laser apparaît très brillant (au moins dans un canal, par exemple) alors seules seules l'image / canal à, disent à GreyValue de 200, vous laisseront quelques candidats à la lumière laser. Si les autres canaux sont sombres (ER) dans cette zone, vous savez que c'est une lumière brillante de la bonne couleur. Un peu de filtrage par taille et vous avez de bonnes chances de trouver la place.


1 commentaires

Merci pour la réponse que j'ai un mur et que cela est projeté, lorsque je recommande l'image et cherche le canal rouge parfois, la couleur rouge de la surface projetée peut causer des problèmes.



3
votes

Si vous collez un filtre IR sur votre webcam, votre saillie ne sera pas prise en charge, ce qui facilite la détection du point laser (à l'aide de la soustraction de fond simple, etc.) qui suppose que le pointeur laser émet une lumière IR ...


0 commentaires

8
votes

Vous avez trois options en fonction de la stabilité de votre arrière-plan et que vous voulez faire avec l'image.

Vous pouvez rendre votre image si sombre que la seule chose que vous puissiez voir est le point laser. Vous pouvez le faire en fermant le diaphragme et / ou en réduisant le temps d'obturation. Même avec des webcams bon marché, cela peut généralement être fait dans le conducteur. Une fois que vous avez fait cela, le travail de recherche du point laser est très facile. Vous rendez l'image aussi sombre que possible parce que le point que le laser brille est trop brillant pour la caméra pour ramasser. Cela signifie (comme vous l'avez expérimenté) que vous ne pouvez pas discerner entre le point laser léger et les autres objets lumineux de l'image. En rendant plus sombre, vous pouvez maintenant faire cela.

Si vous avez d'autres utilisations pour votre image (en le montrant aux personnes) et que votre arrière-plan est stable, vous pouvez également utiliser la moyenne des dernières images vidéo en tant que "fond", puis trouvez l'endroit où il y a une grande différence entre ce fond et la nouvelle image. C'est généralement où le laser est pointé (à nouveau, si votre arrière-plan est suffisamment stable).

Enfin, si votre arrière-plan n'est pas stable et que vous ne voulez pas rendre votre image très sombre, votre option finale est de rechercher tous les pixels très lumineux et plus lumineux dans le canal rouge qu'au vert et bleu (si vous utilisez un laser rouge). Ce système sera toujours distrait par des taches blanches, mais pas autant que de trouver les pixels lumineux. Si le centre de votre point de pointeur laser apparaît effectivement comme blanc brillant, quelle que soit la couleur laser, cette technique vous permettra de trouver des "bagues" autour de cette tache lumineuse (la partie extérieure du point où le laser n'est pas aussi brillant que C'est au centre de sorte qu'il apparaisse avec la couleur réelle du laser dans l'image). Vous pouvez ensuite utiliser Simple Opérations morphologiques , (probablement La fermeture suffit) pour remplir ces cercles.


1 commentaires

Je pense que je ferais mieux d'essayer les deux premières options et semble que c'est possible :). Merci beaucoup.



0
votes

Essayez Machure de modèle. Tout d'abord, vous "pointez le pointeur" à un endroit spécifique afin que le temple puisse être fait. Ensuite, vous venez de le chercher.

ou, comme dit Jilles de Wit, vous pouvez faire la différence des 2 derniers cadres, probablement la différence vous montrera le pointeur.

Convertissez les 2 derniers cadres Do Grey Balance, puis appliquez la sous-fonction.


0 commentaires

1
votes

Comme suggéré dans d'autres réponses, la recherche de la couleur pourrait être une bonne idée. Vous devriez envisager de rechercher une plage de couleurs spécifique. La meilleure façon de faire ceci est de convertir la photo en espace de couleur HSL ou HSV.

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


0 commentaires

1
votes

Que diriez-vous de ce code

https://www.youtube.com/watch?v=mkuwnz_obqq < / p>

https://github.com/niitsuma/detect_laser_pointer

Dans ce code, la couleur HSV observée est comparée à la couleur enregistrée à l'aide du test carré T Hôtelling


0 commentaires