OpenCV检测背景困难的方 block

标签 opencv image-recognition square baduk

我正在开发一款可以识别 GO board 的 Android 应用程序并创建一个 SGF file

我需要检测整个板,以便扭曲它并能够找到正确的线条和石头,如下所示。

filledboard
(来源:eightytwo.axc.nl)

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

  • 分离 channel
  • 精通各个 channel

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

    Core.bitwise_or(temp_canny, canny, canny);
    
  • 找到棋盘的轮廓

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

filledboard
(来源:eightytwo.axc.nl)

我怎样才能改进这个检测?或者我应该实现多种方法来检测它并在失败时在它们之间切换..

* 牢记重要事项 *

  • 棋盘颜色各异
  • 围棋盘可以是空的,也可以完全填满棋子
    这意味着我不能依赖于检测电路板上的外部黑线
  • 背景并不总是纯白色

这是 pictures with go boards 的一个小集合我想检测

* 更新 * 23-05-2016

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

最佳答案

我正在处理同样的问题!

我的方法是假设两件事:

  1. 相机稳定
  2. 董事会稳定

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

关于OpenCV检测背景困难的方 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36344166/

相关文章:

python - 使用 OpenCV 去除具有形态学侵 eclipse 的视网膜图像中的小血管

ios - iOS 中的图像识别

java - 二值图像中的轮廓和周长识别

python - 使用 OpenCV 进行车牌识别

swift - 使用 opencv : UIImage too slow 实时处理 ARkit 帧

matlab - "Simple"边缘-线-检测

dashboard - 如何访问 Cube 中的内部仪表板?

c++ - 我的 sfml 纹理在哪里超出范围?

swift - 如何制作方形视频?

python-3.x - 如何使用openCV清除图像中的数字?