我正在开发一款可以识别 GO board 的 Android 应用程序并创建一个 SGF file
我需要检测整个板,以便扭曲它并能够找到正确的线条和石头,如下所示。
(来源:eightytwo.axc.nl)
现在我使用 Opencv RGB Mat 并执行以下操作:
- 分离 channel
精通各个 channel
Imgproc.Canny(channel, temp_canny, 30, 100);
合并(按位或)所有 channel 。
Core.bitwise_or(temp_canny, canny, canny);
- 找到棋盘的轮廓
我仍然无法始终如一地检测到木板,因为一些线条往往会消失,如下图所示,木板上的黑线和石头清晰可见,但在某些地方缺少木板边缘。
(来源:eightytwo.axc.nl)
我怎样才能改进这个检测?或者我应该实现多种方法来检测它并在失败时在它们之间切换..
* 牢记重要事项 *
- 棋盘颜色各异
- 围棋盘可以是空的,也可以完全填满棋子
这意味着我不能依赖于检测电路板上的外部黑线 - 背景并不总是纯白色
这是 pictures with go boards 的一个小集合我想检测
* 更新 * 23-05-2016
我有点用完了使用 opencv 来解决这个问题的灵感,所以非常感谢新的灵感!!! 与此同时,我开始使用机器学习,初步结果很好,我会及时通知您,但仍然对创建 opencv 实现寄予厚望。
最佳答案
我正在处理同样的问题!
我的方法是假设两件事:
- 相机稳定
- 董事会稳定
这让我可以在棋盘仍为空时(播放前)从单帧中推断出变形参数。使用这些参数来扭曲每一帧,无论有多少石头挡住了棋盘边缘。
关于OpenCV检测背景困难的方 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36344166/