如何使用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
相关产品推荐
相关产品推荐

