【发布时间】:2018-08-10 19:23:58
【问题描述】:
我找不到关于该主题的任何令人满意的答案。我想制作一个程序,从台球桌上方的相机获取快照并检测球。我正在使用 OpenCV 和 Java。我现在的算法基本上是:
模糊图像 -> 将 RGB 转换为 HSV -> 分成 3 个平面 -> 在 H 平面上使用 Canny() -> 使用 HoughCircles() 方法检测球
这个算法很好地检测球,它只对两个球有问题(绿色和蓝色,因为桌子的背景是绿色的)。但我想更进一步:
- 检测球是属于条纹还是固体
- 为每个球设置一个 ID,例如条纹为 1-7,实心为 8-14,每个球都有唯一的 ID,在比赛期间不会更改
您知道如何实施任务 #1 吗?我的想法是使用 inRange() 函数,但是我必须为每个球准备一个掩码,以检测指定颜色范围内的一个球,并对每个球进行此检测,对吗?感谢您分享您的意见。
@Edit:这里我给你一些我的算法如何工作的示例。我更改了一些参数,因为我想检测所有内容,现在效果更差了,但它仍然可以非常准确地工作。我会给你三个来自相机的原始图像样本,我检测到球的图像(未失真,带有一些过滤器)和检测到球的图像。
【问题讨论】:
-
尝试发布示例图片供用户测试他们的假设。即使是绿色的球也与绿色的桌子背景颜色不同。
-
我可以看到检测固体,但条纹会很困难。我认为最好的办法是让另一台相机参与进来并开始进行比较和交叉检查。