我想使用 OCR (pytesseract) 来识别图像中的文本,如下所示:
我有数千支这样的箭头。到目前为止,过程如下:我首先调整图像大小(用于另一个过程)。然后我裁剪图像以去除箭头的大部分。接下来,我绘制一个白色矩形作为框架以消除更多噪音,但文本和图像边框之间仍然有距离,以便更好地识别文本。我再次调整图像大小,以确保大写字母的高度达到约 30 像素,
最后我用阈值 150 对图像进行二值化。
完整代码:
import cv2
image_file = '001.jpg'
# load the input image and grab the image dimensions
image = cv2.imread(image_file, cv2.IMREAD_GRAYSCALE)
(h_1, w_1) = image.shape[:2]
# resize the image and grab the new image dimensions
image = cv2.resize(image, (int(w_1*320/h_1), 320))
(h_1, w_1) = image.shape
# crop image
image_2 = image[70:h_1-70, 20:w_1-20]
# get image_2 height, width
(h_2, w_2) = image_2.shape
# draw white rectangle as a frame around the number -> remove noise
cv2.rectangle(image_2, (0, 0), (w_2, h_2), (255, 255, 255), 40)
# resize image, that capital letters are ~ 30 px in height
image_2 = cv2.resize(image_2, (int(w_2*50/h_2), 50))
# image binarization
ret, image_2 = cv2.threshold(image_2, 150, 255, cv2.THRESH_BINARY)
# save image to file
cv2.imwrite('processed_' + image_file, image_2)
# tesseract part can be commented out
import pytesseract
config_7 = ("-c tessedit_char_whitelist=0123456789AB --oem 1 --psm 7")
text = pytesseract.image_to_string(image_2, config=config_7)
print("OCR TEXT: " + "{}\n".format(text))
问题在于箭头中的文本永远不会居中。有时我会使用上述方法删除部分文本(例如在图像 50A 中)。
图像处理中是否有一种方法可以以更优雅的方式消除箭头?例如使用轮廓检测和删除?我对 OpenCV 部分比识别文本的 tesseract 部分更感兴趣。
任何帮助表示赞赏。
慕尼黑的夜晚无繁华
慕尼黑5688855
相关分类