【问题标题】:How do I isolate handwritten text from an image using OpenCV and Python?如何使用 OpenCV 和 Python 从图像中分离手写文本?
【发布时间】:2019-09-28 20:54:54
【问题描述】:

如何使用 OpenCV 和 Phyton 为图像隔离或仅裁剪手写文本:

我试过用:

cv2.findContours

但由于噪音(背景和纸张脏),我不能只拿到纸张。

我该怎么做?

【问题讨论】:

    标签: python opencv image-processing handwriting-recognition


    【解决方案1】:

    为了平滑噪声图像,典型的方法是应用某种类型的模糊滤镜。例如cv2.GaussianBlur()cv2.medianBlur()cv2.bilaterialFilter() 可用于去除椒盐噪声。模糊后,我们可以阈值得到二值图像,然后进行形态学操作。从这里,我们可以找到轮廓并使用纵横比或轮廓区域进行过滤。为了裁剪 ROI,我们可以使用 Numpy 切片


    检测到的文字

    提取的投资回报率

    代码

    import cv2
    
    image = cv2.imread('1.jpg')
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    blur = cv2.medianBlur(gray, 5)
    thresh = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV,11,8)
    
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
    dilate = cv2.dilate(thresh, kernel, iterations=6)
    cnts = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]
    cnts = sorted(cnts, key=cv2.contourArea, reverse=True)
    
    for c in cnts:
        x,y,w,h = cv2.boundingRect(c)
        ROI = image[y:y+h, x:x+w]
        cv2.imwrite('ROI.png', ROI)
        break
    
    cv2.imshow('thresh', thresh)
    cv2.imshow('dilate', dilate)
    cv2.imshow('ROI', ROI)
    cv2.waitKey()
    

    【讨论】:

    • 我没有为我工作。我复制了您的代码,但 ROI 打印了图像的顶部,即纸张上方的部分。
    • 使用您提供的输入图像,我得到了正确的结果。您的输入图像是 .png 还是 .jpg?尝试使用更新的代码。结果应该是一样的
    • 我的图片是 jpeg。这是投资回报率:ROI 和三个一起:three。感谢您的帮助。
    • 您的扩张图像与我的不同。很奇怪。你确定你有cv2.MORPH_RECT, (5,5)iterations=6 吗?尝试将iterations=6 更改为iterations=15
    【解决方案2】:

    转灰度,强腐蚀,二值化。忘记去噪。

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2020-03-07
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多