Kes*_*han 7 c++ webcam opencv feature-detection background-subtraction
我想用网络摄像头跟踪激光光点(在墙上),我正在使用openCV来完成这项任务.任何人都可以建议我用C++来做到这一点.
谢谢 !
您有三个选项,具体取决于背景的稳定性以及您要对图像执行的操作.
你可以让你的图像变暗,你唯一能看到的就是激光点.您可以通过关闭光圈和/或减少快门时间来完成此操作.即使使用廉价的网络摄像头,通常也可以在驱动程序中完成 完成这项工作后,找到激光点的工作非常简单.您可以使图像尽可能暗,因为通常激光照射的点太亮而不能让相机拾取.这意味着(正如您所经历的那样)您无法辨别光激光点和图像中的其他光对象.通过使它变暗,你现在可以做到这一点.
如果您的图像有其他用途(向人们显示)并且您的背景稳定,您还可以使用最后几个视频图像的平均值作为"背景",然后找到该背景之间存在较大差异的位置和最新的图像.这通常是激光指向的地方(同样,如果背景足够稳定).
最后,如果你的背景不稳定并且你不想让你的图像非常暗,你的最终选择是寻找所有非常明亮的像素,并且红色通道中的像素比绿色和蓝色更亮(如果你正在使用红色激光).这个系统仍然会被白点分散注意力,但不会像找到明亮的像素那么多.如果激光指针点的中心确实显示为亮白色而不管激光颜色如何,那么这种技术将允许您在该亮点周围找到"环"(激光不如光亮的点的外部)它位于中心位置,以便显示图像中激光的实际颜色.然后,您可以使用简单的形态学操作(可能关闭就足够了)来填充这些圆圈.