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

如何优化图像预处理实现Fruit Box游戏数字精准提取?

优化Fruit Box游戏截图数字OCR识别的方案

我正在开发Fruit Box解谜程序,需要从游戏界面截图中提取数字列表,使用pytesseract进行OCR时,尝试了阈值二值化、HSV颜色识别+漫水填充等预处理,仍存在数字识别错误(如第二行956应为96)或多余错误数字,以下是针对性优化建议:


1. 精准区域裁剪,排除干扰元素

游戏截图中的数字按单元格排列,先定位每个数字的单元格区域,只裁剪包含数字的部分识别,彻底规避苹果、边框等干扰。结合轮廓检测实现区域定位:

import cv2
import pytesseract
import numpy as np

img = cv2.imread('appletest.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 边缘检测提取单元格轮廓
edges = cv2.Canny(gray, 50, 150)
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

digit_regions = []
for cnt in contours:
    x, y, w, h = cv2.boundingRect(cnt)
    # 根据实际单元格尺寸过滤(需根据截图调整宽高阈值)
    if 50 < w < 100 and 50 < h < 100:
        digit_regions.append((x, y, w, h))

# 按行排序区域(从上到下、从左到右)
digit_regions.sort(key=lambda r: (r[1], r[0]))

# 逐个识别区域内的数字
result = []
for (x, y, w, h) in digit_regions:
    roi = gray[y:y+h, x:x+w]
    # 二值化反转,让数字为白色、背景为黑色
    _, binary = cv2.threshold(roi, 240, 255, cv2.THRESH_BINARY_INV)
    # 使用单字符识别模式(--psm 10),配合数字白名单
    text = pytesseract.image_to_string(binary, config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789')
    text = text.strip()
    if text:
        result.append(text)

print(result)

说明:--psm 10是单字符识别模式,更适配单个数字的识别场景,区域裁剪能大幅降低干扰源。

2. 优化二值化与去噪逻辑

原固定阈值二值化易受光照影响,改用自适应阈值+去噪组合,适配局部明暗差异:

grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 高斯模糊去噪
blur = cv2.GaussianBlur(grayImage, (3,3), 0)
# 自适应高斯二值化(反转后数字为白色)
adaptive_binary = cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
# 形态学开运算去除小噪点
kernel = np.ones((2,2), np.uint8)
cleaned_img = cv2.morphologyEx(adaptive_binary, cv2.MORPH_OPEN, kernel)

3. 精准颜色过滤

原HSV范围未针对数字颜色优化,调整范围只保留数字(假设数字为深色),排除苹果和背景:

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 调整深色数字的HSV范围(需根据实际截图微调)
lower_dark = np.array([0, 0, 0])
upper_dark = np.array([180, 255, 80])
mask = cv2.inRange(hsv, lower_dark, upper_dark)
# 反转mask,让数字为白色便于识别
mask = cv2.bitwise_not(mask)

4. 自定义字符训练(可选)

如果Tesseract对游戏字体识别效果持续不佳,可收集游戏内数字样本,训练自定义字符集:

  • 收集每个数字的多份样本图像(不同位置、不同场景)
  • 使用jTessBoxEditor生成.box标注文件和训练数据
  • 训练后将自定义字库导入Tesseract,替换或补充默认字库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:43:10