Python 从图像中的重叠字母中提取数据
输入图像: 我想从图像中提取数据(ocr) 我试过的代码:Python 从图像中的重叠字母中提取数据,python,numpy,opencv,image-processing,python-imaging-library,Python,Numpy,Opencv,Image Processing,Python Imaging Library,输入图像: 我想从图像中提取数据(ocr) 我试过的代码: import cv2 import textract import numpy as np img = cv2.imread('/home/ajay/Desktop/name.jpg',0) # img = cv2.imread('path_to_your_image', 0) _, blackAndWhite = cv2.threshold(img, 127, 255, cv2.THR
import cv2
import textract
import numpy as np
img = cv2.imread('/home/ajay/Desktop/name.jpg',0)
# img = cv2.imread('path_to_your_image', 0)
_, blackAndWhite = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(blackAndWhite, None, None, None, 8, cv2.CV_32S)
sizes = stats[1:, -1] #get CC_STAT_AREA component
img2 = np.zeros((labels.shape), np.uint8)
for i in range(0, nlabels - 1):
if sizes[i] >= 50: #filter small dotted regions
img2[labels == i + 1] = 255
res = cv2.bitwise_not(img2)
cv2.imwrite('ress.png', res)
a = textract.process('ress.png',method = 'tesseract')
a = a.decode()
print(a)
一个简单的方法是:
以下是步骤的可视化: 输入图像 削尖 大津阈值 轻微高斯模糊 反转图像 以下是使用Pytesseract的OCR结果
DST INTERNATIONAL D-307@ 3266 01 Dec 2007. HowellJerde Jan!
2007" 125802AM RafaelaBoyer Keon3@gmnil.com Fhvio Abernathy Sr.
代码
我不知道你说的噪音是什么。我在这张二元图像中几乎看不到它。你能给我们看一下预期的“干净”图像吗?增加了预期的输出,请检查一下我是否同意@YvesDaoust,在你的二值化图像中基本上没有噪音。你在寻找什么?我可以想象如何从预期的输出图像中获取输入图像,但我不认为你可以用非常简单的方法反向操作。你的“预期输出”似乎是原始图像的模糊版本(在二值化之前)。它以什么方式更干净?它看起来并没有比第一个更可读。我们可以把图片中的文本做得更薄一点吗?谢谢你的代码。在倒影中keon3@gmail.com在,3,ma,om上,这些字母组合在一起,有没有其他方法可以让文字更清晰?。你越是腐蚀,以分开每个字符,更多的细节丢失。最好的解决方案是使用质量更好的输入图像。作为一个阅读它的人,确定文本是相当困难的。因此,如果计算机读取它,它将变得更加困难
import cv2
import numpy as np
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
sharpen = cv2.filter2D(gray, -1, kernel)
thresh = cv2.threshold(sharpen, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
blur = cv2.GaussianBlur(thresh, (3,3), 0)
invert = 255 - blur
data = pytesseract.image_to_string(invert, lang='eng',config='--psm 6')
print(data)
cv2.imshow('sharpen', sharpen)
cv2.imshow('thresh', thresh)
cv2.imshow('blur', blur)
cv2.imshow('invert', invert)
cv2.waitKey()