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

使用cv2与pytesseract提取黑底红字截图文本失败求助

问题解决:黑底红字截图文本提取失败

核心问题是PIL截图的色彩空间与OpenCV默认色彩空间不匹配:

  • ImageGrab.grab()获取的图像是RGB格式
  • 你用cv2.COLOR_BGR2GRAY转换灰度,相当于把RGB当成BGR处理,红字的红色通道会被错误映射,导致灰度图中红字对比度极低,阈值处理后文字被完全过滤,Tesseract自然识别不到。

修复代码

直接把灰度转换的色彩空间参数改成COLOR_RGB2GRAY即可:

import sys
from PIL import ImageGrab
import cv2
import numpy as np
from pytesseract import pytesseract

pytesseract.tesseract_cmd = r'C:\site-packages\Tesseract-OCR\tesseract.exe'

def Extract(tupleCoordenates):
    pic = ImageGrab.grab(bbox=tupleCoordenates)
    img = np.array(pic)
    # 修正色彩空间转换:RGB转灰度
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    limiar, imgThreash = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    text = pytesseract.image_to_string(imgThreash)
    return text

额外优化(针对红字场景)

因为红字在RGB的R通道中亮度最高,可以直接提取R通道做阈值处理,进一步提升对比度:

def Extract(tupleCoordenates):
    pic = ImageGrab.grab(bbox=tupleCoordenates)
    img = np.array(pic)
    # 直接提取R通道
    r_channel = img[:, :, 0]
    limiar, imgThreash = cv2.threshold(r_channel, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    text = pytesseract.image_to_string(imgThreash)
    return text

注释:存盘后再读取正常,是因为cv2.imread()会自动把JPG等格式的图像转换成BGR,此时色彩空间匹配,灰度转换自然正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:52:42