C++ 使用OpenCV和C+进行激光检测+;

C++ 使用OpenCV和C+进行激光检测+;,c++,opencv,webcam,feature-detection,background-subtraction,C++,Opencv,Webcam,Feature Detection,Background Subtraction,我想用网络摄像头跟踪一个激光光点(在墙上),我正在使用openCV来完成这项任务。有人能建议我用C++来做吗?< /P> 谢谢大家! 假设您使用以下颜色之一的激光:红色、绿色、蓝色。 如果激光点看起来非常明亮(至少在一个通道中,例如红色),则只需将图像/通道的阈值设置为200,例如灰度值为200,将为激光留下一些候选。如果这个区域的其他通道是暗的(er),那么你知道这是一个正确颜色的亮光。按大小进行一点过滤,你就有很好的机会找到光斑。如果你在网络摄像头上贴上一个红外滤光片,你的投影将不会被拾取,

我想用网络摄像头跟踪一个激光光点(在墙上),我正在使用openCV来完成这项任务。有人能建议我用C++来做吗?< /P>
谢谢大家!

假设您使用以下颜色之一的激光:红色、绿色、蓝色。
如果激光点看起来非常明亮(至少在一个通道中,例如红色),则只需将图像/通道的阈值设置为200,例如灰度值为200,将为激光留下一些候选。如果这个区域的其他通道是暗的(er),那么你知道这是一个正确颜色的亮光。按大小进行一点过滤,你就有很好的机会找到光斑。

如果你在网络摄像头上贴上一个红外滤光片,你的投影将不会被拾取,从而使激光点的检测变得更容易(使用简单的背景减法e.t.c)假设激光指针发出红外光…

根据背景的稳定性以及对图像的处理,您有三种选择

你可以使你的图像如此黑暗,以至于你只能看到激光点。您可以通过关闭光圈和/或缩短快门时间来完成此操作。即使使用便宜的网络摄像头,这通常也可以在驱动程序中完成。一旦你这样做了,找到激光点的工作就很容易了。你使图像尽可能暗,因为通常激光照射的点太亮,相机无法捕捉。这意味着(正如您所经历的)您无法区分图像中的光激光点和其他光对象。通过使它更暗,你现在可以做到这一点

如果你的图像有其他用途(向人们展示),并且你的背景是稳定的,你也可以使用最后几张视频图像的平均值作为“背景”,然后找到背景与最新图像之间存在较大差异的地方。这通常是激光指向的地方(同样,如果你的背景足够稳定的话)

最后,如果你的背景不稳定,你不想让你的图像变得很暗,你最后的选择是寻找所有的像素,这些像素在红色通道中都非常亮,并且比绿色和蓝色通道中的更亮(如果你使用的是红色激光)。这个系统仍然会被白点分散注意力,但不会像寻找明亮的像素那样。如果激光指针光斑的中心确实显示为亮白色,而与激光颜色无关,则该技术将允许您在该亮点周围找到“环”(激光点的外部部分没有中心处那么亮,因此它与图像中激光的实际颜色一起显示)。然后,您可以使用simple(可能足够)填充这些圆。

尝试模板加工。 首先,你把指针指向一个特定的地方,这样庙宇就可以完成了。那你就去找吧

或者,正如jilles de wit所说,你可以取最后两帧的差值,也许差值会显示指针


将最后两帧转换为灰度,然后应用子函数。

如其他答案所示,搜索颜色可能是个好主意。 你应该考虑寻找一个特定的颜色范围。最好的方法是将图片转换为HSL或HSV颜色空间

cv::cvtColor(src, hsv, COLOR_BGR2HSV);
有关的更多信息

那么你有三个频道: 色调(=颜色)、饱和度和亮度(或值)

带有
cv::inRange(hsv,cv::Scalar(159135165),cv::Scalar(179255200),inRange)现在可以生成黑白图像,显示颜色范围内的像素。
标量是每个通道的低值和高值

在本例中,您将获得颜色介于159和179之间(色调)、饱和度介于135和255之间以及值介于165和200之间的像素

也许这可以改善你的追踪

这个代码怎么样


在本代码中,使用Hotelling的t平方检验将观察到的HSV颜色与注册颜色进行比较

是否可以在网络摄像头前使用某种过滤器?如果可以,这些过滤器是什么?事实上,光源是一种对您非常重要的激光器,或者你只是使用一个,因为它是一个方便的方式,使一个亮点?也就是说,你有什么理由关心光源是单色的和相位匹配的吗?如果是这样的话,点投射到的表面的光学特性是什么(平坦度等)?你能不能只扫描图像中的小区域,与相邻区域相比,红色成分明显增强?@辩证法:请注意,奇普二极管激光器现在有多种颜色。所以
s/red/you laser's color/
@dmckee:我有一堵墙,我把我的电脑投影到那堵墙上,我想从那面墙过滤激光点(当我把激光点指向它时)。谢谢你的回复,我有一堵墙,它正被投影到那里,当我拍摄图像并寻找红色通道时,有时投影表面的红色可能会造成一些麻烦。我认为我最好尝试前两种选择,似乎这是可能的:)。非常感谢你。