2

我正在开发一个可以识别GO 板并为其创建SGF 文件的 Android 应用程序。

我需要检测整个木板以使其变形并能够找到正确的线条和石头,如下所示。

填充板
(来源:八十二.axc.nl

现在我使用 Opencv RGB Mat 并执行以下操作:

  • 分离通道
  • 精明的独立频道

    Imgproc.Canny(channel, temp_canny, 30, 100);
    
  • 组合(按位或)所有通道。

    Core.bitwise_or(temp_canny, canny, canny);
    
  • 找到电路板轮廓

我仍然无法始终如一地检测到棋盘,因为有些线条会消失,如下图所示,棋盘上的黑线和石头清晰可见,但在某些地方缺少棋盘边缘。

填充板
(来源:八十二.axc.nl

我该如何改进这种检测?或者我应该实施多种检测方法并在其中一种失败时在它们之间切换..

*重要的要记住*

  • 围棋板颜色不同
  • 围棋板可以是空的或完全装满石头,
    这意味着我不能依赖检测板上的外部黑线
  • 背景并不总是纯白色

这是我想检测的一小部分带有围棋板的图片

* 更新 * 23-05-2016

我有点用opencv来解决这个问题的灵感用完了,所以非常感谢新的灵感!!!与此同时,我开始使用机器学习,第一个结果很好,我会及时通知你,但仍然对创建 opencv 实现寄予厚望。

4

1 回答 1

1

我正在解决同样的问题!

我的方法是假设两件事:

  1. 相机稳定
  2. 板子很稳

这使我可以在棋盘仍然为空时(在播放之前)从单个帧中推断出变形参数。使用这些参数来扭曲每一帧,无论有多少石头挡住了棋盘边缘。

于 2016-11-10T12:33:08.763 回答