学科分类
目录
网络爬虫

对图片进行阈值过滤和降噪处理

前面所介绍的图像比较接近于理想图像,文字极易被识别与处理。不过,大多数的情况下,网络上看到的图片是带有背景颜色的。例如,图片中的文字位于带有渐变背景的图像中,如图1所示。

img

图1 符合文字规范的图像

图1中描述了带有渐变背景的文字图片。从图1中可以看出,随着背景颜色从左向右不断地加深,文字的清晰度不断降低,这使得文字的识别变得越来越难。

遇到上述这类问题,可以预先过滤掉图片中的渐变背景色,留下图像中的文字,从而增加图像的清晰度,便于文本的识别与读取。例如,通过阈值过滤器处理上述图片,处理后如图2所示。

img

图2 阈值过滤后的图像

图2中描述了阈值过滤的图像。从图2中可以看到,大部分的文字都可以被识别到,只剩下一些不太清晰的标点符号,及丢失的文字。

接下来,我们通过PIL库将图1的图像进行阈值过滤处理成二值图,之后通过tesseract引擎处理后的图像进行文字识别,具体示例代码如下。

from pytesseract import *
from PIL import Image
def clean_file(file, newfile):
     '''
     将图片经过过滤后进行识别
     :param file: 图片文件的路径
     :param newfile: 处理后图片的路径
     '''
  image = Image.open(file)
  # 对图片进行阈值过滤(低于143的置为黑色,否则为白色)
  image = image.point(lambda x: 0 if x < 143 else 255)
  # 重新保存图片
  image.save(newfile)
  text = pytesseract.image_to_string(image)
  print(text)
if __name__ == '__main__':
  clean_file("test.png","test_copy.png")

上述示例中,定义了一个用于处理图像的方法clean_file,在该方法中,首先调用open函数打开给定的图像文件,之后调用point方法进行阈值过滤,即将图像中像素颜色数低于143的像素点置为黑色,其余置为白色,从而得到一个二值图,并将这个图保存到新的路径下。然后,通过pytesseract库的image_to_string函数将图像以OCR识别技术转换成字符串进行输出。

上述图片识别的最好结果如下:

This is some text, written in Arial, that will be ,
Tesseract. Here are some symbols: IW“’
点击此处
隐藏目录