OpenCV Java SimpleBlobDetector未检测到任何关键点

问题描述

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

我在4.3.0处导入了最新版本,但是我想尝试Blob Detection功能,但是不能。

我发现了SimpleBlobDetector类,它没有将Params传递给它的方法,也没有任何其他传递过滤器的方法。所以我只能编写以下代码

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,是吗?

搜索该问题也没有提供任何有用的信息。

解决方法

值得更详细地看一下简单的斑点检测器示例,以对它们的工作方式有一个适当的了解,但是在高层次上,您需要告诉它要检测哪种颜色,然后它将找到轮廓或轮廓线用于由该颜色组成的任何形状或斑点。

检测器采取的步骤是:

  • 缩小图像的大小
  • 过滤掉所有我们想要的颜色
  • 增强图像的其余部分,使其更易于检测边缘或轮廓
  • 找到颜色的其余“斑点”的轮廓(轮廓或边缘)
  • 过滤掉任何太小而无用的东西
  • 返回剩余斑点的列表,或更准确地返回轮廓列表,这些轮廓是剩余斑点的轮廓

此答案包含详细的注释代码摘录,以更完整地说明步骤:https://stackoverflow.com/a/40918718/334402