Python 实现字符识别—Part1

如果你看的比较困惑的话,可以参考
Python 实现字符识别—Part1:关于PIL库的使用
http://www.jianshu.com/p/0a94d8ea2bf3
Python 实现字符识别—Part2:关于图形格式的基础知识和我的一个问题(欢迎大神来指点迷津)
http://www.jianshu.com/p/252ff113d1d0
Python 实现字符识别—Part3:关于完成验证码识别的前置操作,字符的提取和图像的分割
http://www.jianshu.com/p/4ff1559c1cf6
Python 实现字符识别—Part4 : 关于空间向量搜索算法paper的介绍
http://www.jianshu.com/p/b13b3905cc7d
Python 实现字符识别—Part5:关于使用空间向量搜索算法实现字符识别
http://www.jianshu.com/p/1905bf78f0bd

python用来出图像处理离不开一个很重要的库就是PIL。PIL的全称是Python Imaging Library。

由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。

在命令行下直接通过pip安装:
$ pip install pillow

<br />

第一部分先写一下PIL库的一些常用的函数
  1. 输出图片大小
  2. 图片的缩放
  3. 图片的模糊
  4. 以不同图像格式的方式去创建图片(这个非常非常重要 当年数字图像处理这门课学的全tmd忘了!!!)
    这个我特意总结了一下,回头再去总结上来
  5. 获得图片上的一个像素和设置图片上的一个点的像素
#coding:utf-8
from PIL import Image,ImageFilter
im=Image.open('2.jpg')
w,h=im.size

#size[0]是長
print im.size[0]
#size[1]是寬
print im.size[1]

print ('image size is :  %s  x %s'%(w,h))

#改變圖片的大小
print('resize image : %s  x %s'%(w/2,h/2))
im.thumbnail((w//2,h//2))
im.save('thumbnail.jpg','jpeg')

#模糊
im2=im.filter(ImageFilter.BLUR)
im2.save('blur.jpg','jpeg')

#创建一个图片
#‘rgb’ 指的是图片的色彩模式;width,height,是长和宽;(255,255,255)是rgb颜色
image = Image.new('RGB', (width, height), (255, 255, 255))

#当然也可以以其他的方式去创建这个图片
im2=Image.new("P",im.size,255)

#获得图片上某一个点的像素 
pix=im2.getpixel((y,x))

#设置像素
im2.putpixel((y,x),0)

<br />

生成字母验证码图片

下面是核心代码:

#创建图片
image = Image.new('RGB', (width, height), (255, 255, 255))
#绘制
draw = ImageDraw.Draw(image)
#填充图片里面的每一个像素
for x in range(width):
    for y in range(height):
        draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
    draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())


这是生成随机数字验证码的图片:

#cpoding:utf-8
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random

# 随机字母:
def rndChar():
    return chr(random.randint(65, 90))

# 随机颜色1:
def rndColor():
    return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))

# 随机颜色2:
def rndColor2():
    return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))

# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
#这一部分是字体库的路径,在ubuntu的路径,其他平台不适用
font = ImageFont.truetype('/usr/share/fonts/truetype/padauk/Padauk.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
    for y in range(height):
        draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
    draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

参考资料:廖雪峰的python教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容