如何在python中将灰色背景更改为白色背景?

时间:2020-06-27 12:32:48

标签: python image-processing

我正在尝试使用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)

如果您在理解上有困难,请发表评论。谢谢!

1 个答案:

答案 0 :(得分:0)

实际上,您的代码已经去除了灰色背景-它位于th, threshed = cv2.threshold(gray2, 240, 255, cv2.THRESH_BINARY_INV)行中,它将所有颜色值低于240的像素设置为0(白色),而将颜色值更高的像素设置为255(黑色)。

问题在于,在进一步处理中,您不会使用处理过的图像(threshed),而会坚持使用gray图像。这同样适用于您执行的其他转换-它们已经执行,但是您将结果分配给以后不再使用的新变量。重要的是要了解许多操作(我敢说大多数Python库和案例通常是默认操作)不会更改输入 -相反,它们会返回 new < / em>对象并进行了一些更改。

因此,简而言之-在每一行中,您都应以某种方式处理图像,而应该使用上一个操作的输出,而不是初始变量。