【问题标题】:OpenCV - Extract letters from string using pythonOpenCV - 使用python从字符串中提取字母
【发布时间】:2017-07-19 00:51:45
【问题描述】:

我有一张图片

我想从其中单独提取每个字符。

因为我想要THIS OUTPUT 之类的东西。

使用 OpenCV 和 python 执行此操作的合适方法是什么?

【问题讨论】:

  • 您为示例和输出提供了相同的链接。
  • @frederick99 对不起..现在请再检查一次....

标签: python-2.7 opencv image-processing


【解决方案1】:

Amitay 精彩回答的简短补充。您应该使用

否定图像

cv2.THRESH_BINARY_INV

在白纸上捕捉黑色字母。

另一个想法可能是这样的 MSER blob 检测器:

img = cv2.imread('path to image')
(h, w) = img.shape[:2]
image_size = h*w
mser = cv2.MSER_create()
mser.setMaxArea(image_size/2)
mser.setMinArea(10)

gray = cv2.cvtColor(filtered, cv2.COLOR_BGR2GRAY) #Converting to GrayScale
_, bw = cv2.threshold(gray, 0.0, 255.0, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

regions, rects = mser.detectRegions(bw)

# With the rects you can e.g. crop the letters
for (x, y, w, h) in rects:
    cv2.rectangle(img, (x, y), (x+w, y+h), color=(255, 0, 255), thickness=1)

这也会导致全字母识别。

【讨论】:

  • 您的想法很棒,并且在大多数情况下都有效,但有时它会将两个字符检测为一个字符。你知道如何优化它以获得完美的字符分割吗?
  • 尽管调整了 MSER 参数,但您可以使用 dilate + erode 来增加间隙(在蒙版上使用它,然后从原始图像中裁剪)。抱歉回复晚了。
  • 在非常困难的情况下(图像中有很多噪音),这不适用于 cv2。我将建立自己的模型来分离字符。
【解决方案2】:

您可以执行以下操作(opencv 3.0 及以上)

  1. 对图像运行 Otsu 阈值 (http://docs.opencv.org/3.2.0/d7/d4d/tutorial_py_thresholding.html)
  2. 使用阈值图像上的统计信息运行连接组件标记。(How to use openCV's connected components with stats in python?)
  3. 对于每个连接的组件,使用您从第 2 步获得的统计信息获取边界框,该统计信息为每个共同点提供以下信息 (cv2.CC_STAT_LEFT cv2.CC_STAT_TOP cv2.CC_STAT_WIDTH cv2.CC_STAT_HEIGHT)
  4. 使用边界框从原始图像中裁剪组件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多