【问题标题】:How To Detect A Specific Mark On A Image Using OpenCv Python如何使用 OpenCv Python 检测图像上的特定标记
【发布时间】:2021-05-07 19:07:25
【问题描述】:

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

图片:

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

我该怎么做

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

【问题讨论】:

  • 我是否正确理解您已经有一个实例正在运行并找到标记?输出类型是什么?有元信息吗?
  • 不,我没有运行任何实例,我只是想找到一种方法来找到标记。
  • 请提供更多代码
  • 您可以尝试阈值化,然后获取轮廓。由此,得到正确尺寸的轮廓。或者如果那个区域总是那个大小和形状,你可以做模板匹配。你有什么尝试?
  • @fmw42 我试过了,但我经常没有得到标记,但我只得到半圆

标签: python opencv opencv-python


【解决方案1】:

我猜是显微镜输出。

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

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

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

您可以使用机器学习获得惊人的准确度,但是,还有其他方法:

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

也许您可以遵循这些教程,然后提出更具体的代码相关问题,例如“为什么模糊不适用于我的等高线图代码?”。

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

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

希望这能回答你的问题。

【讨论】:

    【解决方案2】:

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

    之后;做一些斑点检测:

    事实上;我能够使用下面链接中的答案来完成这一点;稍作调整。

    OpenCVs BlobDetector crashes

    【讨论】:

    • 你的价值是什么,我可以在它周围制作边界框
    • 如果您能显示一些代码将不胜感激
    • 你能画一个边界框吗?我不明白为什么不...我强烈鼓励进行一些尽职调查并查看我引用的帖子。以下是我使用的过滤器,除了观察输出以获得最佳结果之外,为什么我修改这些值的原因没有具体逻辑:-) smoothed = cv2.GaussianBlur(gray, (1,1), sigmaX=3, sigmaY=3, borderType = cv2.BORDER_DEFAULT) thresh = cv2.adaptiveThreshold(smoothed, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 65, 55) params.minArea = 500 params.filterByCircularity = False params.filterByConvexity = False params.filterByInertia = False
    【解决方案3】:

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

    这张图片会澄清它:

    【讨论】:

    • 我认为您可能想研究一些对灰度“变化”感兴趣的滤镜,因为图像的上半部分颜色相对较浅,下半部分较暗(两者都不是你感兴趣吗?)有趣的是,从光到暗再回到光的小斑点。这些更改很容易在 opencv 中过滤。
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2019-02-27
    相关资源
    最近更新 更多