如何对图像进行字符分割请参见说明?

问题描述

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

enter image description here

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

enter image description here

我将使用这种细分来删除韩语文本,并将其替换为英语翻译。

也许您会考虑使用黑白检测来进行这种分割,但是在背景上不一定是纯白色。

其他一些示例:

enter image description here

enter image description here

您能提供任何导致眼前问题的线索吗?我的最终目标是将英文文本叠加在图片上,使其看起来自然而不奇怪。

如果您想提出一种完全不同的即用型解决方案来分割图像,那我也乐于接受任何建议和想法,这也很棒。我希望能用韩文替代韩文。

解决方法

所以您确实已经有了周围的盒子, 包装文字正确吗? (我已阅读评论。)

剩下的问题是

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()

输入: input

投资回报率削减: example pic roi

输出: output

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)
lineType               = 2

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

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