Python Tesseract无法识别Valorant截图中的数字,求解决方案
解决Valorant剩余时间识别问题
一、先做图片预处理优化
游戏里的数字大多带半透明、抗锯齿效果,或是背景复杂,直接丢给Tesseract很容易识别失败,先给裁剪后的图片做几步预处理:
- 转灰度图:砍掉颜色干扰
- 阈值二值化:把数字和背景硬分开,让数字边缘更清晰
- 去噪声:清理小杂点,避免干扰识别
修改后的代码加入预处理步骤:
import time import pyautogui import cv2 import pytesseract # 截图与裁剪流程 time.sleep(2) myScreenshot = pyautogui.screenshot() myScreenshot.save(r'Path\screenshot.png') raw = cv2.imread("Path/screenshot.png") y=10 x=1160 h=100 w=200 cropped = raw[y:y+h, x:x+w] cv2.imwrite("Path/Time.png", cropped) # 图片预处理 img = cv2.imread("Path/Time.png") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化(如果识别效果差,可以调整127这个阈值) _, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 去除小噪声 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2)) cleaned = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel) # Tesseract识别配置 custom_config = r'--oem 3 --psm 10 -c tessedit_char_whitelist=0123456789:' string = pytesseract.image_to_string(cleaned, config=custom_config) # 去掉多余空白字符 string = string.strip() print(string)
二、调整Tesseract的识别配置
--oem 3:用默认OCR引擎模式,兼容性更好--psm 10:强制识别单个字符,适配时间数字的单元素特性tessedit_char_whitelist=0123456789::只允许识别数字和冒号,大幅降低识别错误率
三、额外优化点
- 收窄裁剪区域:确保只框住时间数字,别带多余的游戏界面元素
- 微调阈值:如果二值化后数字还是不清晰,试着把代码里的127改成更高或更低的数值
- 更新Tesseract:旧版本对特殊游戏字体支持差,换成最新版试试
内容的提问来源于stack exchange,提问作者V0rteX
相关产品推荐
相关产品推荐

