Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV-使用实时摄像头检测托盘中丢失的硬币_Python_Opencv_Image Processing_Computer Vision - Fatal编程技术网

Python OpenCV-使用实时摄像头检测托盘中丢失的硬币

Python OpenCV-使用实时摄像头检测托盘中丢失的硬币,python,opencv,image-processing,computer-vision,Python,Opencv,Image Processing,Computer Vision,我正在建立一个系统来检测从托盘中捡到的硬币。此托盘将存放在公共场所。人们会捡起一枚或多枚硬币,但会在一段时间后将它们放回原处 我会有一个通过顶部的网络摄像头直播的视频流。我将有一个校准步骤,比如在一天的开始,它捕获托盘的初始状态,用于与实时进纸进行比较。正如您在示例图像中所看到的,一些插槽一开始可能是空的 我需要检测最初有硬币的插槽,但在一天中的任何给定时间点丢失相同的插槽 我正在使用OpenCV尝试几种方法: SSIM差异:我可以使用SSIM查找实时图像帧和初始状态之间的差异。但是,有一些

我正在建立一个系统来检测从托盘中捡到的硬币。此托盘将存放在公共场所。人们会捡起一枚或多枚硬币,但会在一段时间后将它们放回原处

我会有一个通过顶部的网络摄像头直播的视频流。我将有一个校准步骤,比如在一天的开始,它捕获托盘的初始状态,用于与实时进纸进行比较。正如您在示例图像中所看到的,一些插槽一开始可能是空的

我需要检测最初有硬币的插槽,但在一天中的任何给定时间点丢失相同的插槽

我正在使用OpenCV尝试几种方法:

  • SSIM差异:我可以使用SSIM查找实时图像帧和初始状态之间的差异。但是,有一些插槽大于相应的硬币尺寸(例如,顶部两排)。这可能意味着,如果硬币最初放在中间,但后来放回去接触其中一个边缘,我们可能会得到假阳性

  • Blob检测:或者,我可以预先输入(或检测)插槽坐标。然后在每个插槽中执行水滴检测。如果一个水滴在原始状态下出现,但在相机框架中丢失,这意味着捡到了一枚硬币。然而,如果硬币和托盘之间的对比度较低,则准确的斑点检测可能是一个挑战

我可能还需要注意,由于周围移动的人的阴影,光线会有轻微的变化

对这些或其他可供尝试的方法有何想法?有没有类似的实现我可以学习

非常感谢


编辑:感谢@I.Newton的建议。对于那些偶然发现这个问题并从示例实现中受益的人,请看这里:

如果您完全控制了照明条件,您可以使用简单的颜色阈值来解决问题

首先为盒子做一个面具。你可以通过颜色阈值或使用自适应阈值或canny边缘等多种方式来实现。我是通过颜色阈值实现的

然后用同样的方法为硬币做一个面具

现在,从每枚硬币的中心填充你的盒子面具。它将只保留那些没有硬币的

现在,您可以将其与初始面具进行比较,以确定是否所有硬币都存在


这不包括帧减法。所以你不必担心硬币在盒子里的不同位置。你唯一需要确定的是制作面具的照明条件。如果你想确保硬币被放回同一个盒子,你应该进行模板匹配等,这同样需要努力。

因为硬币的背景是非常独特的红色。您可以尝试简单的基于HSV的颜色过滤。i、 e找出托盘区域并检查托盘的平均颜色。如果托盘为红色,则表示托盘中没有硬币!我有几个问题。1) 你只想检测硬币丢失的地方吗?2) 你想让每枚硬币都像以前一样准确地放在投币口吗?@janu777现在,我只想找出硬币丢失的地方。我想通过视频流上绘制的红色闪光矩形突出显示相应的插槽。一旦硬币被挡住,闪光就会消失。最后,我想处理这样一个用例:如果捡起两枚硬币并将它们放回对方的位置,就不会有警报。@BalajiR上面的图片只是为了说明。真实图像可能没有这么好的对比度。因此,我还试图了解我们是否可以利用初始图像(所有硬币都放在托盘上)来匹配实时流帧。这是一个很好的答案,对我提供的图像非常有效。然而,我似乎没有足够的对比度之间的硬币和托盘。下面是一个更合适的图像:对此有何想法?您可以尝试使用。那就行了。相应地更改函数的参数以适合您。我现在没有代码,因为我使用了同一个文件作为另一个答案。