Python Pytesseract无法识别截图字符串的问题解决求助
游戏截图特定文字识别乱码的解决方案
核心优化方向
针对你的场景,主要问题是全屏识别干扰多、目标文字与背景对比度不足,可以通过以下三步解决:
裁剪目标区域
只识别“Enemy”所在的局部区域,排除屏幕其他UI元素的干扰。根据截图,目标文字位于屏幕上方中间位置,可手动指定坐标范围。图像预处理增强对比度
目标文字为黄色,通过HSV颜色空间提取黄色区域,转换为二值化图像,让文字边缘更清晰,降低识别难度。限定Tesseract识别范围
指定只识别字母和标点Enemy,,减少无关字符的误识别,同时设置合适的页面分割模式(PSM)。
修改后的完整代码
import pytesseract import cv2 import pyautogui import numpy as np pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 1. 截图并裁剪目标区域(根据实际坐标调整x,y,w,h) screen = pyautogui.screenshot() screen_np = np.array(screen) # 转换为BGR格式适配OpenCV frame = cv2.cvtColor(screen_np, cv2.COLOR_RGB2BGR) # 裁剪目标区域:示例坐标,需根据你的屏幕调整 x, y, w, h = 400, 100, 600, 80 target_area = frame[y:y+h, x:x+w] # 2. 图像预处理:提取黄色区域并二值化 hsv = cv2.cvtColor(target_area, cv2.COLOR_BGR2HSV) # 黄色的HSV范围(可根据实际微调) lower_yellow = np.array([20, 100, 100]) upper_yellow = np.array([30, 255, 255]) mask = cv2.inRange(hsv, lower_yellow, upper_yellow) # 二值化图像,文字为白色,背景黑色 binary_img = cv2.bitwise_not(mask) # 3. Tesseract识别,限定字符集和PSM模式 custom_config = r'--psm 6 -c tessedit_char_whitelist=Enemy, ' result = pytesseract.image_to_string(binary_img, config=custom_config) print("识别结果:", result.strip()) # 显示处理后的图像,方便调试 cv2.imshow('Processed Image', binary_img) cv2.waitKey(0) cv2.destroyAllWindows()
关键说明
- 坐标调整:
x,y,w,h需要根据你的实际屏幕分辨率和文字位置修改,可以用pyautogui.position()获取鼠标hover在文字边缘时的坐标。 - HSV范围:如果黄色识别不准确,可以微调
lower_yellow和upper_yellow的数值适配实际画面颜色。 - PSM模式:
--psm 6表示假设图像是单一的均匀文本块,适合这种连续重复的文字场景。
内容的提问来源于stack exchange,提问作者roditu
相关产品推荐
相关产品推荐

