本文介绍一种将图片转化为文本的实现方法
在很多时候,我们需要把图片转化成文本,然后再进一步处理。比如,在网站登录时候,可能会遇到需要输入验证码,如何让程序能够自动识别验证码并进行登录验证?
其中一种方法就是可以将验证码的图片进行下载,然后将图片转化成一种文本,再利用一些机器学习的算法将文本进行内容处理,得到图片中的内容。
下面以下图为例,将图片中的“123”转化为文本存储。
使用到的Python模块包为:Pillow(PIL)
Pillow是Python的一个图像处理库,常用用法如下:
Image类
Pillow中最重要的类就是Image,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片。
使用Image模块中的open函数打开一张图片:
from PIL import Image
im=Image.open('123.jpg')
如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容:
print(im.format, im.size, im.mode)
PPM (512, 512) RGB
format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。
如果文件不能打开,则抛出IOError异常。
当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像,例如显示图片:
im.show()
读写图片
Pillow库支持相当多的图片格式。直接使用Image模块中的open()函数读取图片,而不必先处理图片的格式,Pillow库自动根据文件决定格式。
Image模块中的save()函数可以保存图片,除非你指定文件格式,那么文件名中的扩展名用来指定文件格式。
如:将图片保存为”123_new.png”
im.save('123_new.png')
获取图片尺寸
im.size #返回结果为二元元组(width,height)
获取图片像素颜色
im.getpixel((a,b)) #a,b分别代表width和height,返回结果为三元元组,GRB格式颜色,如:白色(255,255,255) ,黑色(0,0,0)
重置图片大小
new=im.resize((a,b)) #a,b为新设置的图片大小
new.save('new.png')
代码示例
#导入Image方法
from PIL import Image
#打开图片
im=Image.open('123.jpg')
#获取图片宽和高
width=im.size[0]
height=im.size[1]
#将图片转化为文本,在每个像素点处用数字和空白字符替换
fh=open('123.txt','w')
for i in range(height):
for j in range(width):
#获取(j,i)像素点颜色
col=im.getpixel((j,i))
colsum=col[0]+col[1]+col[2]
if(colsum==0):
#黑色
fh.write('1')#在黑色像素点处用数字1代替
else:
fh.write(' ')#在非黑色像素点处用空格代替
fh.write('\n')
fh.close()
处理结果