【问题标题】:OpenCV detect square with difficult backgroundOpenCV检测具有困难背景的正方形
【发布时间】: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


【解决方案1】:

我正在解决同样的问题!

我的方法是假设两件事:

  1. 摄像头稳定
  2. 板子稳定

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

【讨论】:

  • 感谢您的建议!我正在开发一个 android 应用程序,我的目标是能够在游戏期间随时检测到它。放弃了 openCV 实现并开始使用机器学习,目前正在编译一个很好的数据集,但一小部分的结果看起来很有希望:stackoverflow.com/questions/35410997/…(最后编辑)
猜你喜欢
  • 2014-11-14
  • 2019-09-15
  • 2013-11-12
  • 1970-01-01
  • 2016-01-08
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
相关资源
最近更新 更多