如何检测国际象棋广场上是否有棋子?

时间:2015-11-25 13:08:59

标签: c++ opencv image-processing

我必须检测一个国际象棋棋盘,如图所示:

我将这个图像划分为64个子图像,这些子图像代表黑白棋方格,如:

如何检查这些子图像(每个方块)是否包含棋子?

2 个答案:

答案 0 :(得分:2)

首先,您需要优化方块检测,因为黑色中有一些白色区域,反之亦然。为了快速完成这项工作,您可以在广场中心裁剪较小的投资回报率,假设大部分投资都在中心位置。

对于实际检测,有各种简单的选项,我想在你的情况下可以完美地工作。不需要进行复杂的特征检测和机器学习。

选项:

  • 如果您知道方块的颜色,请使用一些阈值来找到该块。
  • 您可以查看正方形中灰度的标准偏差。没有一块就会很低,所以你可以在这里使用一些门槛。
  • 您可以使用空方块进行背景减法。

无论哪种方式,都会有一些噪音,所以你必须稍微玩一下才能找到最佳的阈值/参数。 大多数情况下,做一些预处理模糊以获得更平滑的结果也更好。

答案 1 :(得分:0)

您需要考虑很多事情:

  • 有必要有国际象棋的观点吗?顶级透视图可以帮助您简化过程,通过这样做可以避免在其他方块中侵入任何一块。

  • 然后你可以通过查看它的直方图来检查方块中是否有一张国际象棋。如果方块没有一块,你可以欣赏曲线中的一个峰值,如果该方块中有一块,你会欣赏到不止一个峰值。您可以使用直方图中的阈值来查找是否存在单个峰(通过查找直方图中的最大点)