【问题标题】:How to do character segmentation on an image (see description)?如何在图像上进行字符分割(见描述)?
【发布时间】:2021-01-06 21:09:15
【问题描述】:

我想从背景中分割字符。到目前为止,我已经能够检测到图像并在图像周围生成边界框。 (见图)

有些人还考虑在文本周围生成边界框以进行分割,但我期待的是从背景中分割字符。 (见图片,绿色部分)

我将使用此分段来删除韩文文本并将其替换为英文翻译。

也许您会考虑使用黑白颜色检测来进行此分割,但它不一定是纯白色的背景。

其他一些例子:

您能否提供解决当前问题的任何线索?我的最终目标是在图像上叠加英文文本,使其看起来自然而不奇怪。

如果您想提出一个完全不同的开箱即用解决方案来分割图像,我愿意接受任何建议和想法。我所期待的只是将韩文替换为英文。

【问题讨论】:

  • 看看pytesseract,尤其是当您处理非拉丁字母的 OCR 时。甚至还有最近的tutorial 使用这个知名人士的 pytesseract 进行非英语 OCR。
  • 本教程是关于生成边界框和检测文本(我已经做过)。我正在寻找一种将其从背景中分割出来的方法。
  • 如果测试总是黑色的 - 你不必担心背景不是完全白色的。
  • 你考虑过使用Stroke Width Transform (SWT)吗?

标签: opencv computer-vision ocr image-segmentation text-segmentation


【解决方案1】:

所以你确实已经有了周围的盒子,它们是 包装文字对吗? (我在 cmets 读过。)

所以剩下的问题是

A) 提取您的感兴趣区域 (ROI) 请注意有趣的角落寻址方法。

B) 将你的字母与背景分开 我会在这里使用simple binary threshold. 唯一的挑战是为所有图片找到全局最优阈值 请参阅下面的 A 和 B 的 python 代码:

import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('kjgqd.png',0)
img = cv.medianBlur(img,5)
#extract roi with box coorindates
imgROI = img[75:230,103:330] 
ret,th1 = cv.threshold(imgROI,127,255,cv.THRESH_BINARY)
titles = ['Original Image', 'Global Thresholding (v = 127)']
images = [imgROI, th1]
for i in range(0,2):
    plt.subplot(2,1,i+1),plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
plt.show()

输入:

投资回报率削减:

输出:

C) 如何将文字从图片转换为书面语言? 欢迎来到 OCR 的大世界 这是您任务中最复杂的问题。

我真的建议您使用 像 Tesseract 这样的框架 一个很好的介绍是here

在最坏的情况下,您应该开始训练自己的模型来检测您的语言。如果您的语言或字体集还没有被 Tesseract 很好地支持,我只会推荐这个。 查看操作方法12

出于教育原因,并且仅针对该用例,我建议您 从话题OCR and the famous Mnist example开始

Here 很好地概述了如何从图片中获取文本的可能方法。

D)翻译你的文字

E) 把英文翻译成图片使用方法 cv.text 喜欢:

import numpy as np
import cv2

#white dummy picture
img = np.zeros((600,200,3), np.uint8)
img.fill(255)#we make it white

# Write some Text
font                   = cv2.FONT_HERSHEY_SIMPLEX
bottomLeftCornerOfText = (10,500)
fontScale              = 1
fontColor              = (0,0,0)
lineType               = 2

cv2.putText(img,'Hello World!', 
    bottomLeftCornerOfText, 
    font, 
    fontScale,
    fontColor,
    lineType)

#Display the image
cv2.imshow("img",img)
cv2.waitKey(0)

【讨论】:

  • 这个答案在某种程度上有帮助吗?
猜你喜欢
  • 2012-12-10
  • 1970-01-01
  • 2012-01-09
  • 2011-08-29
  • 2015-02-07
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
相关资源
最近更新 更多