我正在尝试使用 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 -> 灰度解析
有人可以帮助我吗?
谢谢!
我终于找到了解决问题的方法。
遵循代码:
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