如何优化图像预处理实现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
相关产品推荐
相关产品推荐

