Tesseract OCR的Opencv图像转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tesseract OCR的Opencv图像转换相关的知识,希望对你有一定的参考价值。
我有以下图像,我想提供给tesseract检测文本:
输入图片:
我正在使用OTSU转换处理此图像:代码如下:
import cv2
import numpy as np
from matplotlib import pyplot as plt
import glob
for img in glob.glob("/home/image.jpg"):
cv_img=cv2.imread(img,0)
#img = cv2.imread('1.jpg',0)
cv_img = cv2.medianBlur(cv_img,5)
ret,th1 = cv2.threshold(cv_img,127,255,cv2.THRESH_BINARY)
th2 = cv2.adaptiveThreshold(cv_img,255,cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY,11,2)
th3 = cv2.adaptiveThreshold(cv_img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY,11,2)
cv2.imwrite('OTSU.jpg', th3)
我在此转换后得到的输出图像是:
以下是我的条件:我面临的主要障碍是在图像上随机出现的白线。实际图像的数量可能比1993年的数量多,但干扰图像的白线数量可能会增加,我想清理这些图像文件,以便它们可以用于Tesseract OCR。
我已经在原始图像上尝试了Canny边缘检测,这似乎给出了轮廓
如何清除输入图像以消除文本上重叠的白线?我的目标是通过Tesseract OCR运行它。
我认为你应该在opencv中研究形态转换。文档可以找到here。
从我的脚本中使用侵蚀和扩张的起点制作了一小段代码:
import cv2
import numpy as np
cv_img = cv2.imread('1993.jpg', 0)
cv_img = cv2.medianBlur(cv_img, 5)
ret, th1 = cv2.threshold(cv_img,127,255,cv2.THRESH_BINARY)
th2 = cv2.adaptiveThreshold(cv_img,255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,11,2)
th3 = cv2.adaptiveThreshold(cv_img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)
kernel_erosion = np.ones((3,3), np.uint8)
kernel_dilation = np.ones((1,1), np.uint8)
erosion = cv2.erode(th2, kernel_erosion, iterations=1)
dilation = cv2.dilate(erosion, kernel_dilation, iterations=1)
cv2.imwrite('morph.jpg', dilation)
您可以使用不同的内核或不同的转换。这是我得到的输出:
在阈值图像之前尝试使用CLAHE 。这是我试过的:
import cv2
import numpy as np
image = cv2.imread("numbers.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
clahe = cv2.createCLAHE(clipLimit=10, tileGridSize=(5, 5))
gray = clahe.apply(gray)
ret, thresh = cv2.threshold(v, 140, 150, cv2.THRESH_BINARY_INV)
morph = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, np.ones((5,5), np.uint8),
iterations=1)
morph = cv2.morphologyEx(morph, cv2.MORPH_CLOSE, np.ones((3,1), np.uint8),
iterations=1)
结果:
您可以使用cv2.THRESH_OTSU
替换阈值类型,它应该没有任何问题。尝试使用参数,我相信你可以使它与你的所有图像一起使用。干杯!
cv2.ximgproc.niBlackThreshold还有一个结果:
以上是关于Tesseract OCR的Opencv图像转换的主要内容,如果未能解决你的问题,请参考以下文章
进行 OCR 之前的预处理(tesseract、OpenCV)
如何使用 openCV 或 OCR tesseract 从图像中提取文本? [复制]
使用Python,OpenCV进行Tesseract-OCR绑定及识别
Python+OpenCV+Tesseract实现OCR字符识别