一、PIL庫概述
PIL庫支持影像存盤、顯示和處理,它能夠處理幾乎所有圖片格式,可以完成對影像的縮放、剪裁、疊加以及向影像添加線條、影像和文字等操作,
1、功能:
(1)影像歸檔:對影像進行批處理、生成影像預覽、影像格式轉換等;
(2)影像處理:影像基本處理、像素處理、顏色處理等,
2、分類:
Ⅰ、Image類:from PIL import Image
(1)影像讀取和創建方法
| 方法 | 描述 |
|
Image.open(filename) |
根據引數加載影像檔案 |
|
Image.new(mode, size, color) |
根據給定引數創建一個新的影像 |
|
Image.open(StringIO.StringIO(buffer)) |
從字串中獲取影像 |
例:
from PIL import Image
im = Image.open("D:\\我愛學習\\python3\\photos\\image1.jpg")
(2)處理圖片常用屬性:
| 方法 | 描述 |
| Image.format |
標識影像格式或來源,如果影像不是從檔案讀取,值是None |
|
Image.mode |
影像的色彩模式,"L"灰度影像、"RGB"真彩色影像、"CMYK"出版影像 |
|
Image.size |
影像寬度和高度,單位是像素(px),回傳值是二元元組(tuple) |
|
Image.palette |
調色板屬性,回傳一個ImagePalette型別 |
(3)影像轉換和保存方法:
| 方法 | 描述 |
| Image.save(filename,format) | 將影像保存為filename檔案名,format是檔案格式 |
| Image.convert(mode) | 使用不同的引數,轉換影像為新的模式 |
| Image.thumbnail(size) | 創建影像的縮略圖,size是縮略尺寸的二元元組 |
例:
from PIL import Image
im = Image.open("D:\\我愛學習\\python3\\photos\\image1.jpg")
im.thumbnail((128,128))
im.save("D:\\我愛學習\\python3\\photos\\imagechange1.jpg")
效果對比圖如下:

(4)像素點和RGB:
| 方法 | 描述 |
| Image.point(func) |
根據函式func功能對每個元素進行運算,回傳影像副本 |
| Image.split() | 提取RGB影像的每個顏色通道,回傳影像副本 |
| Image.merge(mode,bands) | 合并通道 ,采用mode色彩,bands是新色的色彩通道 |
| Image.blend(im1,im2,alpha) |
將兩幅圖片im1和im2按照如下公式插值后生成新的影像: im1 * (1.0-alpha) + im2 * alpha |
例:
from PIL import Image
im = Image.open("D:\\我愛學習\\python3\\photos\\image1.jpg")
r,g,b = im.split()
om = Image.merge("RGB",(b,g,r))
om.save("D:\\我愛學習\\python3\\photos\\imagechange2.jpg")
效果對比如下:

Ⅱ、ImageFilter類:from PIL import ImageFilter
| 方法 | 描述 |
|
ImageFilter.BLUR |
影像的模糊效果 |
|
ImageFilter.CONTOUR |
影像的輪廓效果 |
|
ImageFilter.DETAIL |
影像的細節效果 |
|
ImageFilter.EMBOSS |
影像的浮雕效果 |
| ImageFilter.SMOOTH |
影像的平滑效果 |
| ImageFilter.SHARPEN |
影像的銳化效果 |
Ⅲ、ImageEnhance類:from PIL import ImageEnhance
| 方法 | 描述 |
|
ImageEnhance.enhance(factor) |
對選擇屬性的數值增強factor倍 |
|
ImageEnhance.Color(im) |
調整影像的顏色平衡 |
| ImageEnhance.Contrast(im) |
調整影像的對比度 |
| ImageEnhance.Brightness(im) |
調整影像的亮度 |
|
ImageEnhance.Sharpness(im) |
調整影像的銳度 |
Ⅳ、影像字符畫繪制:位圖圖片是由不同顏色像素點組成的規則分布,如果采用字串代替像素,影像就成為了字符畫,
二、實體展現
1、以下圖為例,進行縮略,變色,提取輪廓和浮雕:
(原圖 image6.jpg)
from PIL import Image
from PIL import ImageFilter
im = Image.open("D:\\我愛學習\\python3\\photos\\image6.jpg")
r,g,b = im.split() #變色
newr = b.point(lambda i: i * 0.7)
bm = Image.merge("RGB",(b,g,r))
bm.save("D:\\我愛學習\\python3\\photos\\imageaa2.jpg")
cm = im.filter(ImageFilter.CONTOUR) #輪廓
cm.save("D:\\我愛學習\\python3\\photos\\imageaa3.jpg")
dm = im.filter(ImageFilter.EMBOSS) #浮雕
dm.save("D:\\我愛學習\\python3\\photos\\imageaa4.jpg")
im.thumbnail((120,120)) #縮略
im.save("D:\\我愛學習\\python3\\photos\\imageaa1.jpg")
效果比較如下:

(順序依次為:原圖,縮略,變色,輪廓,浮雕)
2、以下圖為例,進行gif圖提取:
注:
(1)f.seek()函式:用于移動檔案讀取指標到檔案指定的位置
(2)f.tell ()函式:回傳當前檔案指標在檔案中的位置

(原gif tianxianbabe.gif)
from PIL import Image
im = Image.open('D:\\我愛學習\\python3\\photos\\tianxianbabe.gif')
try:
im.save('picframe{:02d}.png'.format(im.tell()))
while True:
im.seek(im.tell()+1)
im.save('picframe{:02d}.png'.format(im.tell()))
except:
print("處理結束")
得到圖片62張,以下為隨機抽取出來的圖片,





3、以下圖為例,進行圖片銳度,磨皮和美白:

(原圖 Image.jpg )
拓展:
import cv2 源自 opencv庫,可用鏡像網站下載安裝包,再到cmd視窗下載:https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python
我下載的是:opencv_python-3.4.9.33-cp36-cp36m-win_amd64.whl 下載路徑是 D:\
安裝時執行命令為:pip install “絕對路徑”+whl檔案名 e.g, pip install D:\opencv_python-3.4.9.33-cp36-cp36m-win_amd64.whl
| 函式 | 描述 |
| cv2.imread(filepath,flags) | 讀入影像,filepath:要讀入圖片的完整路徑,flags:讀入圖片的標志 |
| cv2.imshow(wname,img) | 顯示影像,wname:顯示影像的視窗的名字,img:要顯示的影像(即讀入的影像) |
| cv2.waitKey() | 等待鍵盤輸入,引數為0時,表示無限等待 |
| cv2.imwrite(file,img,num) | 保存影像,file:要保存的檔案名,img:要保存的影像,num:可選,針對特定格式 |
|
cv2.flip(img,flipcode) |
翻轉影像,flipcode = 0:沿x軸翻轉, > 0:沿y軸翻轉,< 0:x,y軸同時翻轉 |
| img.copy() | 復制影像 |
| cv2.destroyAllWindow() | 銷毀所有視窗 |
np.uint8()表示無符號整數(從0 到255)
numpy.clip(a, a_min, a_max, out=None)中a是一維陣列,a_min表示a中最小值, a_max表示a中最大值,
from PIL import Image
from PIL import ImageEnhance
import cv2
import numpy as np
def Sharpen(sharpness):
im = Image.open(filename)
om = ImageEnhance.Sharpness(im)
im_sharpen = om.enhance(sharpness)
im_sharpen.save('D:\\我愛學習\\python3\\photos\\sharpen.jpg')
def Whiten(image,whi):
import cv2
image = cv2.imread(filename)
white = np.uint8(np.clip((whi * image) + 10, 0, 255))
cv2.imshow('Her',white)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('Hermione','Her')
if __name__ =="__main__":
filename = 'D:\\我愛學習\\python3\\photos\\Image.jpg'
sharpness=30
Sharpen(sharpness)
whi = 1.2
image = cv2.imread('D:\\我愛學習\\python3\\photos\\Image.jpg')
Whiten(image,whi)
效果如下:

(從左至右依次為:原圖,銳化,美白)
4、生成gif:
import PIL.Image as Image
def get_gif(pics_dir,n,t=300):
imgs = []
for i in range(n):
pic_name = '{}/{}.jpg'.format(pics_dir,i)
temp = Image.open(pic_name)
imgs.append(temp)
save_name = '{}.gif'.format(pics_dir)
imgs[0].save(save_name, save_all=True, append_images=imgs, duration=t)
return save_name
if __name__ == '__main__':
pics_dir = 'D:\\我愛學習\\python3\\photos\\crazy2'
save_name = get_gif(pics_dir,32,300)
print('制作完成,所屬檔案:{}'.format(save_name))
效果如下:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/160777.html
標籤:Python
