A recent thread on the OpenCV mailing list (entitled: "Tracking laser dots") discussed techniques that could be used to track the dot from a laser pointer. This sounded like something fun, so I finally got around to trying it out. Essentially this could be done acheived by the following algorithm:
- Grab the video frame.
- Convert the video frame to the HSV color space.
- Split the frame into individual components (separate images for H, S, and V).
- Apply a threshold to each compenent (hopefully keeping just the dot from the laser). It was originally suggested that just the Hue component be used to search for the laser's dot, but I actually got several false positives doing this. Therefore, using Value in addition to Hue gave me a more reliable result. I can see where finding good threshold values for all 3 components would be a good approach in some situations.
- Finally, perform an AND operation on the 3 images (which "should" cut down on false positives)
I should note that my testing was performed using a red laser pointer and a large white sheet of paper in an well-lit office. Since I was only tracking the dot on the paper, this turned out to be a fairly easy task to accomplish. Finding good threshold values in other situations would be much more difficult.
Update: This code is now on Github: https://github.com/bradmontgomery/python-laser-tracker