我正在尝试对屏幕截图进行OCR识别,截取屏幕截图(您点击的桌面区域)后,它会转到 pibxbuffer ,内容会转到 pytesseract < / strong>即可。 但使用pixbuffer后图像质量很差:它是偏斜的(我试图将它保存在目录中,而不是pixbuffer,并查看它)。
def takeScreenshot(self, x, y, width = 150, height = 30):
self.width=width
self.height=height
window = Gdk.get_default_root_window()
#x, y, width, height = window.get_geometry()
#print("The size of the root window is {} x {}".format(width, height))
# get_from_drawable() was deprecated. See:
# https://developer.gnome.org/gtk3/stable/ch24s02.html#id-1.6.3.4.7
pixbufObj = Gdk.pixbuf_get_from_window(window, x, y, width, height)
height = pixbufObj.get_height()
width = pixbufObj.get_width()
image = Image.frombuffer("RGB", (width, height),
pixbufObj.get_pixels(), 'raw', 'RGB', 0, 1)
image = image.resize((width*20,height*20), Image.ANTIALIAS)
#image.save("saved.png")
print(pytesseract.image_to_string(image))
print("takenScreenshot:",x,y)
当我将图像保存到目录时,它是正常的(质量)并且识别良好
在没有Image.ANTIALIAS
的情况下尝试 - 没有任何区别。
(缩放的目的是20:我尝试了识别保存在目录中的图像的代码,没有缩放识别质量很差。)
问题在于图像被掠夺。
答案 0 :(得分:2)
这种极端缩放通常对OCR不利,特别是全彩色和特殊处理(抗锯齿)
我会:
加载后立即转换为灰度(以避免您看到的文物):
image = image.convert('L')
答案 1 :(得分:2)
我不知道您是否仍在寻找解决方案,但我遇到了图像偏斜的相同问题。这是GdkPixBuf
的某种填充问题。基本上,图片的height
和width
应始终为divisible by 8
。所以这就是我在拍摄截图之前所做的事情:
width = width + (8 - (width % 8))
height = height + (8 - (height % 8))
完成此操作后,屏幕截图应该可以使用。
您可以详细了解该问题here