OpenCV Python - 修复损坏的文本

Posted

技术标签:

【中文标题】OpenCV Python - 修复损坏的文本【英文标题】:OpenCV Python - Fixing Broken Text 【发布时间】:2019-07-07 21:21:03 【问题描述】:

我正在尝试修复损坏的文本(下图),以便可以对图像执行 OCR。我该如何修复下面的文字?我已经尝试过膨胀、腐蚀、形态闭合和使用轮廓之间的距离。这些似乎都不起作用。我会很感激任何帮助,谢谢。

破碎的文字:

尝试的解决方案(无效):

import cv2
import pytesseract
import numpy as np

img = cv2.imread ("/Users/2020shatgiskessell/Desktop/OpenSlate/FN2.png")

def OCR (img):
    config = ('-l eng --oem 1 --psm 3')
    text = pytesseract.image_to_string(img, config = config)
    return text

def get_countour(img):
        try:
            output = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            output = output.copy()
        except Exception:
            output = img.copy()
        #imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        #ret, thresh = cv2.threshold(output, 127, 255, 0)
        contours, hierarchy = cv2.findContours(output, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
        c = max(contours, key = cv2.contourArea)
        contours.remove(c)
        cv2.drawContours(output, contours, -1, (0,255,0),-1)

        kernel = np.ones((2,1),np.uint8)
        #eroded = cv2.erode(output, kernel,1)
        output = cv2.dilate(output, kernel,1)
        return output



def strengthen(img):
    try:
        imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    except Exception:
        imgray = img
    #ret, thresh = cv2.threshold(imgray,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    #blur1 = cv2.blur(imgray,(5,5))
    blur2 = cv2.GaussianBlur(imgray,(5,5),0)
    thresh2 = cv2.adaptiveThreshold(blur2, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2)
    kernel = np.ones((2,1),np.uint8)
    #eroded = cv2.erode(thresh2, kernel,1)
    #opening = cv2.morphologyEx(eroded, cv2.MORPH_CLOSE, kernel)
    #closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel)
    return thresh2


#MNIST(img)
strengthened= strengthen(img)

contours = get_countour(strengthened)

print("from morphology transformation: "+ OCR(contours))

cv2.imshow('img', img)
cv2.imshow('contour', contours)

cv2.waitKey(0)
cv2.destroyAllWindows()

以上图片被识别为:

图 1:(CAN ajne oF

图片 2:> AMAR VRAIR

图 3:Sture

【问题讨论】:

我在这些图像上尝试了一些形态学操作,它适用于除 R、E 和 S 之外的所有字母。棘手的问题,你有什么进展吗? @RickM。我最好的结果似乎是使用高斯模糊,然后是自适应阈值、腐蚀、膨胀,最后是轮廓,但是,这些结果仍然不够。 @StephaneHatgis-Kessell 您是否尝试过手动修复并检查 OCR 是否有效?也许您的工作方向错误,您需要的是更好的 OCR,idk。 @StephaneHatgis-Kessell 你能用你最好的结果更新这个问题吗? @RickM。刚刚更新了问题 【参考方案1】:

您可以通过图像补全训练 GAN(生成对抗网络)来做到这一点:

使用深度卷积生成对抗网络完成图像

https://github.com/saikatbsk/ImageCompletion-DCGAN

例子:

有关 GAN 的更多信息:

GANs Presentation

【讨论】:

【参考方案2】:

您的图像只是结果而不是来源,对吗? 你玩过像 21、21 这样的模糊参数吗

blur2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur2 = cv2.GaussianBlur(blur2 , (21, 21), 0)

【讨论】:

以上是关于OpenCV Python - 修复损坏的文本的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 完整例程83. 频率域低通滤波:印刷文本字符修复

Python 检查损坏的视频文件(捕获 OpenCV 错误)

修复由于在文本编辑器中编辑 MySQL 数据库而损坏的序列化数据?

pcl加入整合包显示文件损坏

OpenCV探索之路:图像修复技术

OSx 更新后如何修复损坏的 python 2.7.11