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

使用OpenCV去除游戏图像背景以优化Tesseract OCR识别效果

游戏文字OCR识别优化方案

游戏文字识别效果差的核心问题是背景干扰,以下是针对性的背景去除+OCR优化流程,替换你现有处理逻辑:

1. 预处理:精准分离背景与文字

游戏界面背景通常有复杂纹理或渐变,普通阈值难以生效,改用HSV颜色空间+形态学操作提取文字:

import cv2
import numpy as np
from tesserocr import PyTessBaseAPI, OEM

# 读取图像并转换为HSV颜色空间(比BGR更易区分颜色)
img = cv2.imread("ref.png")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 根据文字实际颜色调整HSV范围(示例为白色文字)
lower_text = np.array([0, 0, 200])
upper_text = np.array([180, 25, 255])
mask = cv2.inRange(hsv, lower_text, upper_text)

# 提取文字区域,背景置黑
text_region = cv2.bitwise_and(img, img, mask=mask)
# 转灰度图后二值化,确保文字为白色、背景为黑色
gray = cv2.cvtColor(text_region, cv2.COLOR_BGR2GRAY)
_, binary_img = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY)

# 去除噪点(游戏界面常见小颗粒干扰)
kernel = np.ones((2,2), np.uint8)
binary_img = cv2.morphologyEx(binary_img, cv2.MORPH_OPEN, kernel)

2. 优化Tesseract识别配置

针对游戏文字的固定字体、规整排版特性,调整识别参数:

with PyTessBaseAPI(psm=7, oem=OEM.LSTM_ONLY, path=f"ocr", lang="d2r") as api:
    # 限制识别字符集(仅保留游戏中可能出现的字符)
    api.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()")
    api.SetVariable("user_words_file", "ocr/dict.txt")
    api.ReadConfigFile("ocr/config.txt")
    
    api.SetImage(binary_img)
    print(api.GetUTF8Text().strip())

cv2.imshow('processed', binary_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

关键调整要点

  • 颜色范围校准:用取色工具获取目标文字的HSV值,调整lower_text和upper_text(比如黄色文字范围约为[20,100,100]到[30,255,255])
  • PSM模式选择:游戏文字多为单行或固定块,用psm=7(单行识别)或psm=6(单一均匀块)比默认psm=3更精准
  • 二值化方向:如果是深色背景配浅色文字用THRESH_BINARY,反之用THRESH_BINARY_INV,确保文字为白色(Tesseract对白底黑字识别更稳定)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:15:35