我正在尝试使用pyterreract
ocr来识别屏幕一部分上的字符。它说即使正在扫描某些字符也无法检测到任何字符。我认为问题是它的背景为灰色,而我尝试扫描/捕获的文本为黑色。我认为灰色背景可以解决这个问题,因此我想将灰色改为白色,并希望该软件能够正常工作。这是我的代码:
imghi = ImageGrab.grab(bbox = (x, y, x + offx, y + offy))
imgglo = np.array(imghi)
gray = cv2.cvtColor(imgglo,cv2.COLOR_BGR2GRAY)
gray2 = cv2.fastNlMeansDenoising(gray, None, 9, 13)
th, threshed = cv2.threshold(gray2, 240, 255, cv2.THRESH_BINARY_INV)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (11,11))
morphed = cv2.morphologyEx(threshed, cv2.MORPH_CLOSE, kernel)
Image_Inversed = cv2.bitwise_not(gray)
thresh = 0
maxValue = 255
cv2.threshold(Image_Inversed,10,255,cv2.THRESH_BINARY_INV)
img_final = np.array(Image_Inversed)
cv2.imshow('Mats Viewer', img_final)
tess.pytesseract.tesseract_cmd = r'C:\Users\tyler\AppData\Local\Tesseract-
OCR\tesseract.exe' text = tess.image_to_string(img_final)
如果您在理解上有困难,请发表评论。谢谢!
答案 0 :(得分:0)
实际上,您的代码已经去除了灰色背景-它位于th, threshed = cv2.threshold(gray2, 240, 255, cv2.THRESH_BINARY_INV)
行中,它将所有颜色值低于240的像素设置为0(白色),而将颜色值更高的像素设置为255(黑色)。
问题在于,在进一步处理中,您不会使用处理过的图像(threshed
),而会坚持使用gray
图像。这同样适用于您执行的其他转换-它们已经执行,但是您将结果分配给以后不再使用的新变量。重要的是要了解许多操作(我敢说大多数Python库和案例通常是默认操作)不会更改输入 -相反,它们会返回 new < / em>对象并进行了一些更改。
因此,简而言之-在每一行中,您都应以某种方式处理图像,而应该使用上一个操作的输出,而不是初始变量。