You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python识别游戏棋盘图片中的所有数字及其对应位置?

游戏棋盘数字识别及定位实现方案

需求说明

识别游戏棋盘图片中的所有数字,同时获取数字在棋盘上的对应位置。

棋盘示例

游戏棋盘示例图片

可行实现思路

  • 图像预处理:对输入图片做灰度化、二值化、高斯降噪处理,存在倾斜的图片先做透视变换矫正,单独提取出棋盘区域排除背景干扰。如果是规则网格棋盘,可先检测横竖网格线,提前划分每个单元格的坐标范围。
  • 数字区域检测:规则网格棋盘直接遍历已划分的每个单元格即可;非固定位置的数字可通过轮廓检测、连通域分析,筛选符合数字尺寸、形状特征的候选区域。
  • 数字识别与位置记录:对每个候选区域做尺寸归一化处理后调用识别模型获取数字内容,同时记录该区域的坐标(左上角+右下角像素坐标,或对应棋盘的行列编号)。
  • 结果校验:结合具体棋盘的游戏规则做结果校验,排除识别误差,比如数独棋盘每个3×3区域内1-9不重复,可用来修正识别错误的结果。

Python可直接使用的相关库

完全有现成的工具库可以直接导入使用,不需要从零开发:

  • 基础图像处理库:OpenCV(导入名为cv2),可覆盖所有图像预处理、网格划分、坐标采集、轮廓检测的需求,是该场景的核心工具。
  • OCR识别库:pytesseract,是Tesseract OCR引擎的Python封装,对规整印刷体数字识别准确率极高,不需要自己训练模型,可通过参数配置仅识别数字,大幅提升准确率。
  • 备选识别方案:如果是手写风格或者模糊的数字,可直接导入TensorFlow/PyTorch加载预训练的MNIST手写数字分类模型,识别效果也很稳定。
  • 辅助工具库:scikit-image可简化特征提取、阈值处理等预处理步骤,适合快速开发。

最简示例代码

import cv2
import pytesseract

# Windows环境需要手动指定tesseract安装路径,Mac/Linux安装后可省略该行
# pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# 读取棋盘图片
img = cv2.imread("chessboard.png")
# 预处理:灰度化+二值化降噪
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# 配置识别参数:仅识别0-9数字,单字符识别模式
ocr_config = r"--oem 3 --psm 10 -c tessedit_char_whitelist=0123456789"

# 此处省略网格划分逻辑,假设已得到所有单元格列表,每个元素为(单元格ROI图,左上角x,左上角y,右下角x,右下角y)
cells = [] # 你的网格划分结果
result = []
for roi, x1, y1, x2, y2 in cells:
    num = pytesseract.image_to_string(roi, config=ocr_config).strip()
    if num.isdigit():
        result.append({
            "数字": int(num),
            "像素位置": (x1, y1, x2, y2)
        })

# 输出所有识别结果
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:36:03