如何对背景为黑色且要提取的文本为红色的图像进行二值化并提取文本(在内存中,而不在磁盘上保存文件)?

问题描述 投票:0回答:1

我正在尝试使用 cv2 和 pytesseract 从小型桌面的屏幕截图中提取文本,但一切都在内存中。我无法花时间将其保存在磁盘上以进行处理后。

我的问题是,当文本在黑色背景上为白色时,效果很好,但有时此文本为红色,因此返回始终为空。

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)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
limiar, imgThreash = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
text = pytesseract.image_to_string(imgThreash)
return text

PS:当我将图片保存在磁盘上并从 cv2.imread("myimage.jpeg", 0) 获取它时,下面的代码有效

myImg = cv2.imread("myimage.jpeg", 0)    
limiar, imgThreash = cv2.threshold(myImg, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
cv2.imwrite(args[2], imgThreash)

我相信问题是从 pic -> img -> 灰度解析

有人可以帮助我吗?

谢谢!

opencv python-tesseract
1个回答
0
投票

我终于找到了解决问题的方法。

遵循代码:

def ThresholdFromScreenShot(tupleCoordenates):

pixels = np.array(ImageGrab.grab(bbox=tupleCoordenates))

gray_f = np.array(Image.fromarray(pixels).convert('L'))

limiar, imgThreash = cv2.threshold(gray_f, 127, 255, 
cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

gray_s = np.array(Image.fromarray(imgThreash).convert('L'))
            
blur = cv2.blur(gray_s,(3,3))

limiar,thresh = cv2.threshold(blur,240,255,cv2.THRESH_BINARY)
    
return thresh
© www.soinside.com 2019 - 2024. All rights reserved.