You need to enable JavaScript to run this app. 如何识别棋盘图像中的空白方格?OpenCV图像识别相关技术问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

如何识别棋盘图像中的空白方格?OpenCV图像识别相关技术问题咨询

国际象棋棋盘空白方格识别方案

现有代码优化

你当前硬编码Canny阈值的方式适配性较差,建议启用已计算的自适应阈值,同时调整高斯模糊参数避免丢失棋子边缘信息,优化后代码参考:

import cv2
import numpy as np

img = cv2.imread("chessboard_input.png", 0)
sigma = 0.33
v = np.median(img)
# 调整高斯模糊核为5*5,减少棋子边缘的模糊损失
img_blur = cv2.GaussianBlur(img, (5, 5), 1)
lower = int(max(0, (1.0 - sigma) * v))
upper = int(min(255, (1.0 + sigma) * v))
img_edge = cv2.Canny(img_blur, lower, upper)

原始输入棋盘:
原始棋盘
当前边缘检测输出:
边缘检测结果

空白方格判断实现思路

无需完全依赖边缘检测结果做判断,按以下步骤处理稳定性更高:

  • 先完成方格ROI切分:通过霍夫直线检测筛选出棋盘的9条水平格线和9条垂直格线,计算得到所有格线的坐标后,按坐标裁剪得到64个仅包含单个方格的独立ROI,排除其他区域的干扰。
  • 再基于ROI特征判断是否为空,推荐两种低复杂度高准确率的方案:
    1. 灰度方差判断:空白方格的像素值分布均匀,灰度方差远低于存在棋子的方格。对每个裁剪后的方格灰度图计算方差,设定对应阈值,方差低于阈值判定为空白,高于阈值判定为有棋子。该方案计算速度快,适配性强。
    2. 直方图匹配判断:提前采集空白黑格、空白白格的灰度直方图作为基准模板,每个待判断方格的直方图和对应颜色的空白模板计算巴氏距离,距离低于阈值则为空白,否则存在棋子。

参考代码片段

# 灰度方差判断空白方格示例,阈值可根据实际测试调整
def is_empty(roi, threshold=150):
    return np.var(roi) < threshold

内容的提问来源于stack exchange,提问作者yoavarviv11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 20:24:06