OpenCV检测背景困难的方块
OpenCV detect square with difficult background
我正在开发一个 Android 应用程序,它将识别其中的一个 GO board and create a SGF file。
我需要检测 整个 板以便扭曲它并能够找到正确的线条和石头,如下所示.
(来源: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 实现寄予厚望。
我正在处理同样的问题!
我的方法是假设两件事:
- 相机稳定
- 板子稳了
这让我可以在棋盘仍为空时(播放前)从单帧中推断出变形参数。使用这些参数来扭曲每一帧,无论有多少石头遮挡了棋盘边缘。
我正在开发一个 Android 应用程序,它将识别其中的一个 GO board and create a SGF file。
我需要检测 整个 板以便扭曲它并能够找到正确的线条和石头,如下所示.
(来源: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 实现寄予厚望。
我正在处理同样的问题!
我的方法是假设两件事:
- 相机稳定
- 板子稳了
这让我可以在棋盘仍为空时(播放前)从单帧中推断出变形参数。使用这些参数来扭曲每一帧,无论有多少石头遮挡了棋盘边缘。