如果你看的比較困惑的話,可以參考
Python 實現字符識別—Part1:關于PIL庫的使用
http://www.lxweimin.com/p/0a94d8ea2bf3
Python 實現字符識別—Part2:關于圖形格式的基礎知識和我的一個問題(歡迎大神來指點迷津)
http://www.lxweimin.com/p/252ff113d1d0
Python 實現字符識別—Part3:關于完成驗證碼識別的前置操作,字符的提取和圖像的分割
http://www.lxweimin.com/p/4ff1559c1cf6
Python 實現字符識別—Part4 : 關于空間向量搜索算法paper的介紹
http://www.lxweimin.com/p/b13b3905cc7d
Python 實現字符識別—Part5:關于使用空間向量搜索算法實現字符識別
http://www.lxweimin.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庫的一些常用的函數
- 輸出圖片大小
- 圖片的縮放
- 圖片的模糊
- 以不同圖像格式的方式去創建圖片(這個非常非常重要 當年數字圖像處理這門課學的全tmd忘了!!!)
這個我特意總結了一下,回頭再去總結上來 - 獲得圖片上的一個像素和設置圖片上的一個點的像素
#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教程