在嘈杂的图像中使用 Tesseract 读取文本

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

我有这两张图片:

enter image description here

enter image description here

第一个的质量明显高于第二个(即使它的质量没有那么差)。我使用 OpenCV 处理这两个图像,以便使用 Tesseract 读取文本:

import tesseract
import cv2

img = cv2.cvtColor(scr_crop, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(img, 220, 255, cv2.THRESH_BINARY)[1]

# Create custom kernel
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# Perform closing (dilation followed by erosion)
close = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

# Invert image to use for Tesseract
result = 255 - close

# result = cv2.resize(result, (0, 0), fx=2, fy=2)

text = pytesseract.image_to_string(result, lang="ita")

因此,我首先对两个图像的灰度版本执行膨胀,然后进行腐蚀,以获得这两个结果

enter image description here

enter image description here

因此,正如您所看到的,对于第一张图像,我获得了很好的结果,并且超正方体能够读取文本,而对于第二张图像,我获得了糟糕的结果,并且超正方体无法读取文本。如何提高第二张图像的质量以获得更好的超立方体结果?

python opencv tesseract
1个回答
1
投票

对于第二张图像,只需应用具有不同阈值类型的

only thresholding

代替

cv2.THRESH_BINARY
,使用
cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU

图像将变成:

enter image description here

如果您阅读:

txt = pytesseract.image_to_string(threshold)
print(txt)

结果将是:

Esiti Positivi: 57

Esiti Negativi: 1512
Numerosita: 1569

Tasso di Conversione: 3.63%

现在

cv2.THRESH_BINARY_INV
cv2.THRESH_OTSU
是什么意思?

如果当前像素值大于设置为 0 的阈值,则

cv2.THRESH_BINARY_INV
cv2.THRESH_BINARY
的相反操作。
maxval
((在我们的例子中为 255),否则。

enter image description here

来源

cv2.THRESH_OTSU
使用 OTSU's 算法找到最佳阈值。 [第3页]

代码:

import cv2
import pytesseract

img = cv2.imread("c7xq9.png")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.threshold(gry, 220, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)[1]
txt = pytesseract.image_to_string(thr)
print(txt)
cv2.imshow("thr", thr)
cv2.waitKey(0)
© www.soinside.com 2019 - 2024. All rights reserved.