【发布时间】:2016-07-20 13:00:54
【问题描述】:
我正在开发一个能够识别GO board 并为其创建SGF file 的Android 应用程序。
我需要检测整个木板以使其变形并能够找到正确的线条和石头,如下所示。
(来源:eightytwo.axc.nl)
现在我使用 Opencv RGB Mat 并执行以下操作:
- 分离通道
-
精巧的独立频道
Imgproc.Canny(channel, temp_canny, 30, 100); -
组合(按位或)所有通道。
Core.bitwise_or(temp_canny, canny, canny); - 找到电路板轮廓
我仍然无法始终如一地检测到棋盘,因为有些线条会消失,如下图所示,棋盘和棋子上的黑线清晰可见,但棋盘边缘在某些地方缺失。
(来源:eightytwo.axc.nl)
如何改进这种检测?或者我应该实施多种检测方法并在其中一种失败时在它们之间切换..
* 需要注意的重要事项 *
- 围棋板颜色各异
- 围棋板可以是空的或完全装满石头
这意味着我不能依赖检测板上的外部黑线 - 背景并不总是纯白色
这是我想检测的pictures with go boards 的小集合
* 更新 * 23-05-2016
我有点用opencv来解决这个问题的灵感用完了,所以非常感谢新的灵感!!! 与此同时,我开始使用机器学习,第一个结果很好,我会及时通知你,但仍然对创建 opencv 实现寄予厚望。
【问题讨论】:
-
如果我理解正确的话,您只想检测板的外边界,对吧?如果不是,并且您想检测所有内容,那么问题将变得过于宽泛且复杂得多。
-
目标是检测棋盘上所有黑白棋子的位置。一种方法是:检测准确的棋盘角,将棋盘弯曲成正方形,然后检测棋子。第二步很简单(我问题中的第一张图片显示了一个有效的检测算法)
-
@MaMiFreak 你还有数据库吗?该链接不再处于活动状态。你设法解决了这个问题吗?
-
@DavidS1992 你在说什么数据库?我只有几张围棋图片
-
@DavidS1992 我已经取得了很大的进步,我有一个工作应用程序可以演示我当前的解决方案(使用 2d 数据训练)。不幸的是,它涉及获取 3d 模型并渲染大量逼真的图像,我很难找到帮助我的人。运气好的话,我很快就能提供一份小的工作机会来获得一些模型并设置自动随机渲染
标签: opencv image-recognition square baduk