首頁  >  文章  >  後端開發  >  Python影像處理之PIL庫

Python影像處理之PIL庫

WBOY
WBOY轉載
2022-06-23 12:22:3911447瀏覽

本篇文章為大家帶來了關於python的相關知識,其中主要整理了PIL庫的相關問題,PIL庫是一個具有強大圖像處理能力的第三方庫,不僅包含了豐富的像素、色彩操作功能,還可以用於影像歸檔和批次處理,下面一起來看一下,希望對大家有幫助。

Python影像處理之PIL庫

推薦學習:python

PIL函式庫的使用

要點:PIL庫是一個具有強大影像處理能力的第三方函式庫,不僅包含了豐富的像素、色彩操作功能,還可以用於影像歸檔和批次處理。

1.PIL函式庫概述

PIL(Python Image Library)函式庫是Python語言的第三方函式庫,需要透過pip工具安裝。安裝PIL函式庫的方法如下,需要注意,安裝函式庫的名字是pillow。

:\>pip install pillow #或者 pip3 install pillow

PIL庫支援圖像儲存、顯示和處理,它能夠處理幾乎所有圖片格式,可以完成對圖像的縮放、剪裁、疊加以及向圖像添加線條、圖像和文字等操作。
PIL庫主要可以實現影像歸檔和影像處理兩方面動能需求
(1)影像歸檔:對影像進行批次、產生影像預覽、影像格式轉換等。
(2)影像處理:影像基本處理、像素處理、色彩處理等。
根據功能不同,PIL庫共包括21個與圖片相關的類,這些類可以被看作是子庫
或PIL庫中的模組,子庫列表如下。
Image、 ImageChops、 ImageColor、 ImageCrackCode、 ImageDraw.ImageEnhance、 ImageFile、 ImageFilelO、 ImageFilter、 ImageFont、ImageGL、 ImageGrab、 Imagemath、 ImageOps、 ImagePalette、PagePath.ImageQ、 Image Iage, Image, Image, Iage,adage, Image.Iage Iage, Image, Image, Image, Iage,adage, Image, Iage,adage, Image, Image, Image, Iage,adage, Image, Iage,adage, Image。最常用的子庫:Image、ImageFilter、ImageEnhance。

2.PIL庫Image類解析

Image是PIL最重要的類,它代表一張圖片,引入這個類的方法如下:

>>>from PIL import Image
在PIL中,任何一個影像檔案都可以用Image物件表示。 Image類別的映像讀取與建立方法如下(共5個):

#方法
##描述
##Image.open(filename) 根據參數載入映像檔
Image.new(mode, size, color) 根據給定參數建立一個新的圖像
Image.open(StringlO.StringlO(buffer)) 從字串中取得圖像
Image.frombytes(mode, size, data) #根據像素點data 建立映像
Image.verify() 對圖像檔案完整性進行檢查、返回異常

透過Image打開圖像檔案時,圖像的柵格資料不會被直接解碼或加載,程式只是讀取了圖像檔案頭部的元資料訊息,這部分資訊標識了圖像的格式、顏色、大小等。因此,開啟一個檔案會十分迅速,與影像的儲存和壓縮方式無關。
要載入一個圖片文件,最簡單的形式如下,之後所有操作對im起作用。

>>>from PIL import Image>>>im = Image.open ("a.jpg")

在使用IDLE互動方式處理圖片檔案時,建議採用檔案的全路徑;如果使用Python檔案形式,建議採用相對路徑,將檔案和程式放到一個目錄中。
Image類別有4個處理圖片的常用屬性,如表所示(共4個)

##描述#Image.format標識影像格式或來源,如果映像不是從檔案讀取,值為NoneImage.mode影像的色彩模式,"L"為灰階影像、"RGB」為真彩色影像、"CMYK」為出版影像重要。 查看已經讀取的映像檔的屬性如下:Image還能讀取序列類別影像檔案,包括GIF、FLI、FLC、TIFF等格式檔案。 open()方法開啟一個影像時自動載入序列中的第一幀,使用seek()和tell()方法可以在不同幀之間移動。
#屬性
調色板屬性,傳回一個ImagePalette類型
>>>print (im. format, im.size, im.mode)JPEG (900, 598) RGB
Image類別的序列影像操作方法(共2個):

#方法

描述

Image.tell()

【实例1】GIF文件图像提取
对一个GIF格式动态文件,提取其中各帧图像,并保存为文件。

from PIL import Image#读入一个GIF文件im = Image.open("pybit.gif")try:
	im.save('picframe{:02d).png'.format(im.tell()))
	while True:
		im.seek(im.tel1 ()+1)
		im.save('picframe{:02d).png'.format(im.tell()))except:print("处理结束")

实例1展示了一种采用try-except编写程序的方法,通过seek()方法和save()方法配合提取GIF图像格式的每一帧,并保存为文件。
Image类的图像转换和保存方法 (共3个) 如表所示。

Image.seek(frame) 跳轉並傳回影像中的指定影格
傳回目前訊框的序號
方法 描述
Image.save(filename, format) 将图像保存为filename文件名,format是图片格式
Image.convert(mode) 使用不同的参数,转换图像为新的模式
Image.thumbnail(size) 创建图像的缩略图,size是缩略图尺寸的二元元组

其中,save()方法有两个参数:文件名filename和图像格式format。如果调用时不指定保存格式,如微实例1,PIL将自动根据文件名filename后缀存储图像;如果指定格式,则按照格式存储。搭配采用open()和save()方法可以实现图像的格式转换,例如,将 jpg格式转换为png格式」代码如下。需要注意,Image 类的 save()方法主要用于保存文件到硬盘,PIL库还提供了功能更强大的格式转换方法。

im = Image.open("a.jpg")im.save("a.png")

Image类可以缩放和旋转图像,其中,rotate(方法以逆时旋转的角度值作为参数来旋转图像。
Image类的图像旋转和缩放方法(共2个):

方法 描述
Image.resize(size) 按size大小调整图像,生成副本
Image.rotate(angle) 按angle角度旋转图像,生成副本

Image类能够对每个像素点或者一幅RGB图像的每个通道单独进行操作。split()方法能够将RGB 图像各颜色通道提取出来;
merge()方法能够将各独立通道再合成一幅新的图像。
lmage类的图像像素和通道处理方法(共4个):

方法 描述
Image.point(func) 根据函数func的功能对每个元素进行运算,返回图像副本
Image.split() 提取RGB图像的每个颜色通道,返回图像副本
Image.merge(mode,bands) 合并通道,其中mode表示色彩,bands表示新的色彩通道
Image.blend(im1,im2,alpha) 将两幅图片iml和im2按照如下公式插值后生成新的图像:im1 (1.0-alpha) + im2 alpha

【实例2】图像的颜色交换
交换图像中的颜色。可以通过分离RGB图片的3个颜色通道实现颜色交换。

from PIL import Imageim = Image.open('a.jpg')r, g, b = im.split()om = Image.merge("RGB" , (b, g, r))om.save('aBGR.jpg')

运行结果:
Python影像處理之PIL庫
原图:
Python影像處理之PIL庫

操作图像的每个像素点需要通过函数实现,可以采用(lambda)函数和point()方法,例子如下,显示效果如图7所示。

>>>im=Image.apen('a.jpg')#打开文件>>>>r,g,b=im.splitO#获得RGB通道数据>>>>newg=g.point(lambda i:i*0.9)#将G通道颜色值变为原来的0.9>>>>newb=b.point(lambda i:i>>>om=Image.merge(im.mode,(r,newg,newb)#将3个通道合成为新图>>>>om.save('new_a.jpg')#输出图片

3.图像的过滤和增强

PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法。
ImageFilter类共提供10种预定义图像过滤方法(共10个):

方法表示 描述
ImageFilter.BLUR 图像的模糊效果
ImageFilter.CONTOUR 图像的轮廓效果
ImageFilter.DETAIL 图像的细节效果
ImageFilter.EDGE_ENHANCE 图像的边界加强效果
ImageFilter.EDGE_ENHANCE_MORE 图像的阈值边界加强效果
ImageFilter.EMBOSS 图像的浮雕效果
ImageFilter.SMOOTHL 图像的平滑效果
ImageFilter.FIND_EDGES 图像的边界效果
ImageFilter.SMOOTH_MORE 图像的阈值平滑效果
ImageFilter.SHARPEN 图像的锐化效果

利用Image类的filter()方法可以使用ImageFilter类,使用方式如下:

Image.filter(ImageFilter.fuction)

【实例3】图像的轮廓获取。
获取图像的轮廓,代码如下,程序执行效果如图所示,图片变得更加抽象、更具想象空间!

from PIL import Imagefrom PIL import ImageFilterim = Image.open('a.jpg')om = im.filter(ImageFilter.CONTOUR)om.save('aContour.jpg')

运行结果:
Python影像處理之PIL庫
原图:
Python影像處理之PIL庫
ImageEnhance类提供了更高级的图像增强功能,如调整色彩度、亮度、对比度、锐化等。
ImageEnhance类的图像增强和滤镜方法(共5个):

方法 描述
ImageEnhance.enhance(factor) 对选择属性的数值增强factor倍
ImageEnhance.Color(im) 调整图像的颜色平衡
ImageEnhance.Contrast(im) 调整图像的对比度
ImageEnhance.Brightness(im) 调整图像的亮度
ImageEnhance.Sharpness(im) 调整图像的锐度

【实例4】图像的对比度增强。
增强图像的对比度为初始的20倍。代码如下,程序执行效果如图7所示。

from PIL import Imagefrom PIL import ImageEnhanceim = Image.open('a.jpg')om = ImageEnhance.Contrast(im)om.enhance(20).save(aEnContrast.jpg')

运行结果:
Python影像處理之PIL庫
原图:Python影像處理之PIL庫

推荐学习:python

以上是Python影像處理之PIL庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除