我有这两张图片:
第一个的质量明显高于第二个(即使它的质量没有那么差)。我使用 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")
因此,我首先对两个图像的灰度版本执行膨胀,然后进行腐蚀,以获得这两个结果
因此,正如您所看到的,对于第一张图像,我获得了很好的结果,并且超正方体能够读取文本,而对于第二张图像,我获得了糟糕的结果,并且超正方体无法读取文本。如何提高第二张图像的质量以获得更好的超立方体结果?
对于第二张图像,只需应用具有不同阈值类型的
only thresholding
。
代替
cv2.THRESH_BINARY
,使用 cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU
图像将变成:
如果您阅读:
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),否则。
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)