我目前正在执行一个简单的任务,必须从简单的图像中读取字符。您可以在python中使用tesseract编写以下代码,该代码适用于所有带有英文文本的简单和复杂图像,但在特定图像上失败,有人可以告诉我为什么下面的python代码不能从下面的图像中读取字符,正如您在6中看到的那样黑色部分,每个框中有6个字符,字符颜色为白色。
from PIL import Image
import pytesseract
import argparse
import cv2
import os
ap = argparse.ArgumentParser()
ap.add_argument("-i","--image",required=True,help="path to input image to be OCR'd")
ap.add_argument("-p","-- preprocess",type=str,default="thresh",help="type of preprocessing to be done")
args=vars(ap.parse_args())
image = cv2.imread(args["image"])
gray2 = cv2.BackgroundSubtractor()
gray2 = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
gray2 = cv2.threshold(gray2, 100, 255, cv2.THRESH_BINARY_INV)[1]
rectKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 3))
sqKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
if args["preprocess"] == "thresh":
gray2 = cv2.threshold(gray2, 2, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
elif args["preprocess"] == "blur":
gray2 = cv2.medianBlur(gray2,3)
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename,gray2)
text = pytesseract.image_to_string(Image.open(filename))
print(text)
If this image is used, it gives perfect result
0123456789 ABCDEFGHIJKL MNOPQRSTUV WXYZ
当我尝试使用下图时,
Processed Image which does not give result 该代码完全忽略了图像中的所有字符。唯一的不同是第一张图片没有第二张图片那样的框,第二张图片每个黑框都包含6个字符
有人可以帮忙告诉我,为什么我的第二个图像代码失败了,谢谢。