繁体   English   中英

OpenCV-使用实时相机源检测托盘中的硬币丢失

[英]OpenCV - detecting missing coins from a tray using a live camera feed

我正在构建一个系统,该系统可以检测从托盘中拾取的硬币。 该托盘将保存在公共场所。 人们会捡起一个或多个硬币,但预计会在一段时间后将其保留。

在此处输入图片说明

我将通过顶部的摄像头进行实时直播。 我将在一天开始时进行一个校准步骤,例如,该步骤将捕获用于与实时数据进行比较的托盘的初始状态。 如示例图像所示,开始时可能有几个插槽是空的。

我需要检测最初具有硬币但在一天中任何给定时间点都没有硬币的插槽。

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

  • SSIM的区别 :我可以使用SSIM查找实时图像帧和初始状态之间的差异。 但是,插槽的数量大于相应的硬币大小(例如,前两行)。 这可能意味着,如果硬币最初放置在中心,但后来又放回接触边缘之一,我们可能会得到误报。

  • 斑点检测 :或者,我可以预送(或检测)插槽坐标。 然后在每个插槽中进行斑点检测。 如果在原始状态下存在斑点,但在相机镜框中没有斑点,则意味着已捡起硬币。 但是,如果硬币和托盘之间的对比度较低,则准确的斑点检测可能会成为一个挑战。

我可能还需要注意照明的细微变化,因为人们四处走动时会产生阴影。

对这些想法有什么想法,或者对可以尝试的替代方法有何想法? 我可以从中学习类似的实现吗?

提前谢谢了。

编辑:感谢@ I.Newton的建议。 对于那些偶然发现此问题并将从示例实现中受益的人,请查看此处: https : //github.com/kewats/computer-vision-samples/tree/master/image-processing/missing-coins-detection

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

首先为包装盒盖上口罩。 您可以通过颜色阈值或使用自适应阈值或Canny边缘等多种方式来完成它。

在此处输入图片说明

然后用相同的方法为硬币制作一个面具。

在此处输入图片说明

现在,从每个硬币的中心填充您的面罩。 它只会保留那些没有硬币的硬币。

在此处输入图片说明

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

在此处输入图片说明

这不包括帧减法。 因此,您不必担心硬币在盒子中的不同位置。 您只需要确定制作口罩的照明条件即可。 如果要确保将硬币放回同一个盒子,则应进行模板匹配等,这再次需要付出努力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM