首页 > 解决方案 > OpenCV Java SimpleBlobDetector 未检测到任何关键点

问题描述

我是 OpenCV 的新手,我使用这个 repo将 OpenCV Java 导入到我的项目中。

我在那里导入了最新版本4.3.0,我想尝试 Blob 检测功能但不能。

我发现 SimpleBlobDetector 类没有办法将参数传递给它或任何其他方式来传递过滤器。所以我只能编写以下代码:

private fun Mat.simpleBlobDetectDraw(): Mat {
    val mat = Mat()
    val sbd = SimpleBlobDetector.create()
    val keyPoints = MatOfKeyPoint()
    sbd.detect(this, keyPoints)
    Features2d.drawKeypoints(this, keyPoints, mat, randomColorScalar(), Features2d.DrawMatchesFlags_DRAW_RICH_KEYPOINTS)
    return mat
}

但是当我运行它时,什么也没有发生,没有找到关键点。所以不知道往哪个方向走。我怀疑 openCV Java 库没有用于 Blob 检测的完整 API,这是真的吗?

谷歌搜索这个问题也没有提供任何有用的信息。

标签: opencvjavacvopencv4androidopencv4.3

解决方案


值得更详细地查看简单的斑点检测器示例,以正确了解它们的工作原理,但在高层次上,您需要告诉它要检测哪种颜色,然后它会找到任何形状的轮廓或轮廓线或由该颜色组成的斑点。

检测器采取的步骤是:

  • 减小图像的大小
  • 过滤掉所有不是我们要找的颜色的东西
  • 增强图像的其余部分,以便更容易检测边缘或轮廓
  • 找到剩余“斑点”颜色的轮廓(轮廓或边缘)
  • 过滤掉任何太小以至于不感兴趣的东西
  • 返回剩余斑点的列表,或更准确地说,是剩余斑点的轮廓的轮廓列表

此答案包含详细的注释代码摘录,以更全面地解释这些步骤:https ://stackoverflow.com/a/40918718/334402


推荐阅读