Python 从图像中的重叠字母中提取数据

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

输入图像:

我想从图像中提取数据(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.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()