OpenCV检测具有困难背景的正方形

时间:2016-03-31 21:29:22

标签: opencv image-recognition square baduk

我正在开发一款能够识别GO board并创建SGF file的Android应用。

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

filledboard http://roelept82.eightytwo.axc.nl/pic/detect.png

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

  • 分开频道
  • 可以分开通道

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

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

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

filledboard http://roelept82.eightytwo.axc.nl/pic/canny.png

我该如何改进这种检测?或者我应该实现多种检测方式,并在一方失败时切换它们。

*重要的是要记住*

  • go board的颜色各不相同
  • 去板可以是空的或完全充满石头
    这意味着我不能依赖于检测板上的外部黑线
  • 背景并不总是纯白色

这是我要检测的pictures with go boards的一小部分

*更新* 23-05-2016

我有点使用opencv来解决这个问题,所以新的灵感非常受欢迎! 与此同时,我开始使用机器学习,第一个结果很好,我会让你发布,但仍然抱有很高的希望创建一个opencv实现。

1 个答案:

答案 0 :(得分:1)

我正在处理同样的问题!

我的方法是假设两件事:

  1. 相机稳定
  2. 董事会稳定
  3. 这允许我在电路板仍为空(播放前)时从单个帧中推断出变形参数。无论有多少石块遮挡板边缘,都可以使用这些参数来扭曲每一帧。