如何使用 OpenCv 检测图像上的特定标记 Python

How To Detect A Specific Mark On A Image Using OpenCv Python

我正在尝试检测物体上的标记并确定它是从中心左侧还是右侧。 以下标有绿色箭头的是我要检测的内容:

图片:

我已阅读 opencv 文档,但找不到执行类似操作的方法。 现在的基本步骤是只检测图像的特定细节并且每次都必须工作然后我期待确定它是在右边还是左边。

我该怎么做

编辑:我已经尝试了 shawn 的方法,看看它是否有效并得到了答案,唯一的问题是通过我的实验,我似乎无法获得如 shawn 的答案所示的完美值。

我猜是显微镜输出。

首先你必须检测(定位)图像中的对象:

  1. 我的默认解决方案是使用机器学习模型进行对象检测。如果您有大量标记数据(例如带注释的图像),这就是这种方式。 例如,您可以针对此问题训练 YOLOv3 微型模型。无需深入研究太多代码,您可以找到用于检测不同内容的教程,并将其应用于您的问题。例如,您可以关注this tutorial,然后您会提出更具体的问题。

  2. 如果您熟悉使用 PyTorch 和 TensorFlow 等机器学习和框架进行对象检测,您可以找到比 YOLOv3 tiny from the GitHub 更轻的模型,并且可以重新训练它们。

您可以使用机器学习实现疯狂的准确性,但是,还有其他方法:

  1. 除了机器学习之外的其他解决方案可能是 object detection using contour plots or object detection using HSV color space。您可以在YouTube或其他教程平台上找到其他没有机器学习的图像处理方法。

也许您可以按照这些教程进行操作,然后提出更具体的代码相关问题,例如“为什么模糊对我的等高线图代码不起作用?”。

其次,当你能够检测到物体后,你应该提取边界框坐标中心,并将其与图像中心坐标进行比较。

如果检测到的物体边界框中心的X坐标大于(图像的宽度)/2,则物体在图像的右侧。如果较小,则检测到的物体在图像的左侧。

希望这能回答您的问题。

如果您的图像都比较相似,您应该能够应用一些滤镜(模糊和阈值处理)来突出感兴趣的区域。

之后;做一些斑点检测:

事实上;使用下面 link 中的答案,我能够做到这一点;稍作调整。

我已经尝试使用 HSV 对象检测并取得了一些不错的结果,但现在唯一的问题是我只有图像的蒙版版本,我想从中检测标记,这是一个相当中等大小的轮廓

这张图片将阐明它: