【问题标题】:Extracting characters from words in an image从图像中的单词中提取字符
【发布时间】:2019-11-27 16:11:55
【问题描述】:

我有一张像 这样的提取图像,我想从这张图像中裁剪并提取单个字母。

我已经尝试了下面的代码,但它只适用于像 这样写的名称,对于这张图片,我一次只得到一个字母的预期结果。

import cv2
import numpy as np

img = cv2.imread('data1/NAME.png')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh1 = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

kernel = np.ones((3, 3), np.uint8)
imgMorph = cv2.erode(thresh1, kernel, iterations = 1)

contours, hierarchy = cv2.findContours(imgMorph,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

i=1
for cnt in contours:
    x,y,w,h = cv2.boundingRect(cnt)

    if w>10 and w<100 and h>10 and h<100:
        #save individual images
        cv2.imwrite("data1/NAME_{}.png".format((i)),thresh1[y:y+h,x:x+w])
        i=i+1

cv2.imshow('BindingBox',imgMorph)
cv2.waitKey(0)
cv2.destroyAllWindows()

此代码给出以下结果

预期结果 像这样。

【问题讨论】:

  • 一个想法是使用水平内核进行扩张以将字母连接在一起。然后找到轮廓并使用最小阈值区域进行过滤。如果这通过了过滤器,那么它必须是文本,以便您可以保存 ROI。如果字母没有接触到盒子,这将起作用。第二种方法是简单地使用偏移量进行裁剪,因为您已经拥有每个提取图像的边界框。只需添加 15 的偏移量即可移除框。同样,这可能有限制,因为如果它连接到框,它将切断一些文本
  • 此图像不是字母可能在框外或触及文本框的一种情况。我关心的是识别写在那个框中的文本,因为我正在尝试分割字母然后预测

标签: python-3.x opencv image-processing roi


【解决方案1】:

当公共线与字母的其余部分一样粗时,您无法通过形态学操作分离接触或重叠的字母。

您无法分割字母,但可以使用机器学习等高级 OCR 技术识别它们。

阅读此http://www.how-ocr-works.com/OCR/word-character-segmentation.html

【讨论】:

  • 如何从左到右分割单词中的字母?
  • @Neo_21995 如果字母已连接,则不能。
  • 如果它们没有像上图那样连接怎么办?包含“SHEKHAR”名称。
【解决方案2】:

它不像阈值和检测 blob 那样简单。您需要训练像 Tesseract 这样的 OCR 引擎来检测手写字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多