opencv - 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,这是真的吗?
谷歌搜索这个问题也没有提供任何有用的信息。
解决方案
值得更详细地查看简单的斑点检测器示例,以正确了解它们的工作原理,但在高层次上,您需要告诉它要检测哪种颜色,然后它会找到任何形状的轮廓或轮廓线或由该颜色组成的斑点。
检测器采取的步骤是:
- 减小图像的大小
- 过滤掉所有不是我们要找的颜色的东西
- 增强图像的其余部分,以便更容易检测边缘或轮廓
- 找到剩余“斑点”颜色的轮廓(轮廓或边缘)
- 过滤掉任何太小以至于不感兴趣的东西
- 返回剩余斑点的列表,或更准确地说,是剩余斑点的轮廓的轮廓列表
此答案包含详细的注释代码摘录,以更全面地解释这些步骤:https ://stackoverflow.com/a/40918718/334402
推荐阅读
- nuget - 在 Teamcity 源中手动上传 Nuget 包
- chatbot - 多类文本分类无法检测 OutOfBound。(聊天机器人应用的关键问题)
- css - 为什么这个 flex-wrap 孩子会增加父宽度以及如何防止?
- laravel - 如何在“post sayı”列中显示用户的帖子数?
- sed - sed 命令替换文件中的第一个匹配项
- amazon-web-services - 试图将所有流量从 EC2 重定向到容器
- c++ - 在一个程序中使用具有内部和外部链接的变量名
- json - Swift UI 获取 JSON
- java - 在 android studio 中从 Uri 获取路径文件
- java - bean初始化-我收到AssertionError:尚未实现