1. 程式人生 > >用Python的PIL模組進行基本的影象操作

用Python的PIL模組進行基本的影象操作

本文為參考《Python計算機視覺程式設計》[美]Jan Erik Solem著的學習筆記。

#PIL的相關使用
from PIL import Image
#open()方法用於建立PIL影象物件,返回一個PIL影象物件
pil_im=Image.open(r'D:\PYTHON35\idle\imagetest\testpic.jpg')
#save()方法用於將圖片儲存成不同格式
pil_im.save(r'D:\PYTHON35\idle\imagetest\testpicopenformat.png')
#convert()用於顏色轉換,這裡引數L表示轉換成灰度影象
pil_imL=Image.open(r'D:\PYTHON35\idle\imagetest\testpic.jpg').convert('L')
pil_imL.save(r'D:\PYTHON35\idle\imagetest\testpicLopen.jpg')

原圖testpic.jpg:

灰度影象testpicLopen.jpg:

————————————————————————————————————————————

#建立一個包含資料夾中所有jpg影象檔案的檔名列表
import os
def get_imlist(path):
    return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]
print(get_imlist(r'D:\PYTHON35\idle\imagetest'))

#從檔名列表filelist中讀取所有的影象檔案
filelist=os.listdir(r'D:\PYTHON35\idle\imagetest')
print(filelist)
#['imagebasic.py', 'testpic.jpg', 'testpicLopen.jpg', 'testpicopen.jpg', 'testpicopenformat.jpg', 'testpicopenformat.png']
for infile in filelist:
    outfile=os.path.splitext(infile)[0]+'.jpg'  #分離檔名和副檔名 
    if infile!=outfile:                         #驗證檔案型別是否為‘.jpg’   
        try:
            Image.open(infile).save(outfile)    #開啟‘.png'檔案,存成‘.jpg’檔案
            print(outfile)                      #以‘.jpg’格式,輸出非‘.jpg’格式的圖片檔案
        except IOError:
            print('connot convert',infile)      #connot convert imagebasic.py

#thumbnail()方法用於將影象轉換成指定大小的縮圖,引數是元組
pil_imthumb=pil_im.thumbnail((256,256))#輸入的元組引數寬高和原影象寬高比不同,依據最小對應邊進行原比例縮放
pil_im.save(r'D:\PYTHON35\idle\imagetest\testpicthumbnail.jpg')##注意thumbnail處理後save作用的物件

縮圖testpicthumbnail.jpg:

——————————————————————————————————————————————

#crop()方法用於從一幅圖中裁剪指定區域,注意rgb影象定義座標系原點在左上
box=(80,80,200,200)
region=pil_im.crop(box)
#transpose()方法用於旋轉圖片,paste()方法用於將圖片放到指定區域
region=region.transpose(Image.ROTATE_90)
pil_im.paste(region,box)
pil_im.save(r'D:\PYTHON35\idle\imagetest\testpicCrRoPa.jpg')

裁剪,旋轉,貼上圖testpicCrRoPa.jpg:
——————————————————————————————————————————————

#建立一個包含資料夾中所有jpg影象檔案的檔名列表
import os
def get_imlist(path):
    return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]
print(get_imlist(r'D:\PYTHON35\idle\imagetest'))

resize圖resizeL.jpg:

rotate45度圖rotateL.jpg: