下午好,
我正在编写一个ocr程序来检测图像上的文本。到目前为止,我得到了很好的结果,但是当文字是黑色而背景是白色时。我该怎么做才能改善浅色背景(黄色,绿色等)上有白色文字的图像?
一个原始示例图像可能是:
到目前为止,我只是使用以下方法将其转换为grey_scale:
image = image.convert('L')
然后应用一系列过滤器,例如: SHARPEN 平滑 模糊 等
然后我像这样进行二值化:
image = image.point(lambda x: 0 if x<128 else 255, '1') #refers to http://stackoverflow.com/questions/18777873/convert-rgb-to-black-or-white and also to http://stackoverflow.com/questions/29923827/extract-cow-number-from-image
我的outoup图像对于像这样的ocr喂食确实非常糟糕:
我做错了什么?浅色背景上白色文字的最佳方法是什么?
另一个疑问:我的二元化步骤是强势/夸大?
我应该混合一些过滤器吗?你能建议吗?
PS:我是图像处理的新手,所以请保持简单= x
非常感谢您的关注和帮助/建议。
答案 0 :(得分:2)
我尝试使用ImageMagick,它也有Python绑定 - 除了我在命令行上做过。我想你可以很容易地调整我做的事情 - 我不会说Pythonese也不会使用PIL但是希望它会给你一些关于可能的途径的见解。
convert http://i.stack.imgur.com/2cFk3.jpg -fuzz 50% -fill black +opaque white -threshold 50% x.png
基本上它采用不在白色50%范围内的任何颜色并用黑色填充它,然后它将结果阈值为纯黑色和白色。
另一种选择是根据颜色的饱和度对图像进行阈值处理。因此,您转换为HSB色彩空间,分离通道并丢弃色调和亮度。然后,您将获得阈值饱和度,如下所示:
convert http://i.stack.imgur.com/2cFk3.jpg -colorspace hsb -separate -delete 0,2 -threshold 50% x.png
投掷-negate
以获得黑色白色字母。
我已经为PIL复制了一些其他代码,并且正在修改它可能接近你需要的东西 - 请记住我不知道Python:
import colorsys
from PIL import Image
im = Image.open(filename)
ld = im.load()
width, height = im.size
for y in range(height):
for x in range(width):
r,g,b = ld[x,y]
h,s,v = colorsys.rgb_to_hsv(r/255., g/255., b/255.)
if s>0.5: // <--- here onwards is my attempted Python
ld[x,y] = (0,0,0)
else:
ld[x,y] = (255,255,255)