pillow python 划线_Python-PIL(pillow)图片处理入门(一)
Pillow是Python里的圖像處理庫(PIL:Python Image Library),提供了了廣泛的文件格式支持,強(qiáng)大的圖像處理能力,主要包括圖像儲(chǔ)存、圖像顯示、格式轉(zhuǎn)換以及基本的圖像處理操作等。
1)使用 Image 類
PIL最重要的類是 Image class, 你可以通過多種方法創(chuàng)建這個(gè)類的實(shí)例;你可以從文件加載圖像,或者處理其他圖像, 或者從 scratch 創(chuàng)建。
要從文件加載圖像,可以使用open( )函數(shù),在Image模塊中:
>>> from PIL import Image
>>> im = Image.open("./1.jpg")
加載成功后,將返回一個(gè)Image對(duì)象,可以通過使用示例屬性查看文件內(nèi)容:
>>> print(im.format, im.size, im.mode)
>>>('JPEG', (600, 351), 'RGB')
format 這個(gè)屬性標(biāo)識(shí)了圖像來源。如果圖像不是從文件讀取它的值就是None。
size屬性是一個(gè)二元tuple,包含width和height(寬度和高度,單位都是px)。
mode 屬性定義了圖像bands的數(shù)量和名稱,以及像素類型和深度。常見的modes 有 “L” (luminance) 表示灰度圖像, “RGB” 表示真彩色圖像, and “CMYK” 表示出版圖像。
如果文件打開錯(cuò)誤,返回 IOError 錯(cuò)誤。
只要你有了 Image 類的實(shí)例,你就可以通過類的方法處理圖像。比如,下列方法可以顯示圖像:
im.show()
2)讀寫圖像
PIL 模塊支持大量圖片格式。使用在 Image 模塊的 open() 函數(shù)從磁盤讀取文件。你不需要知道文件格式就能打開它,這個(gè)庫能夠根據(jù)文件內(nèi)容自動(dòng)確定文件格式。要保存文件,使用 Image 類的 save() 方法。保存文件的時(shí)候文件名變得重要了。除非你指定格式,否則這個(gè)庫將會(huì)以文件名的擴(kuò)展名作為格式保存。
加載圖片文件,并轉(zhuǎn)化為png格式:
"Python Image Library Test"
from PIL import Image
import os
import sys
for infile in sys.argv[1:]:
f,e = os.path.splitext(infile)
outfile = f +".png"
if infile != outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print("Cannot convert", infile)
save() 方法的第二個(gè)參數(shù)可以指定文件格式。
3)創(chuàng)建縮略圖
縮略圖是網(wǎng)絡(luò)開發(fā)或圖像軟件預(yù)覽常用的一種基本技術(shù),使用Python的Pillow圖像庫可以很方便的建立縮略圖,如下:
# create thumbnail
size = (128,128)
for infile in glob.glob("./*.jpg"):
f, ext = os.path.splitext(infile)
img = Image.open(infile)
img.thumbnail(size,Image.ANTIALIAS)
img.save(f+".thumbnail","JPEG")
上段代碼對(duì)photoshop下的jpg圖像文件全部創(chuàng)建縮略圖,并保存,glob模塊是一種智能化的文件名匹配技術(shù),在批圖像處理中經(jīng)常會(huì)用到。 注意:Pillow庫不會(huì)直接解碼或者加載圖像柵格數(shù)據(jù)。當(dāng)你打開一個(gè)文件,只會(huì)讀取文件頭信息用來確定格式,顏色模式,大小等等,文件的剩余部分不會(huì)主動(dòng)處理。這意味著打開一個(gè)圖像文件的操作十分快速,跟圖片大小和壓縮方式無關(guān)。
4)圖像的剪切、粘貼與合并操作
Image 類包含的方法允許你操作圖像部分選區(qū),PIL.Image.Image.crop 方法獲取圖像的一個(gè)子矩形選區(qū),如:
# crop, paste and merge
im = Image.open("./lena.jpg")
box = (100,100,300,300)
region = im.crop(box)
矩形選區(qū)有一個(gè)4元元組定義,分別表示左、上、右、下的坐標(biāo)。這個(gè)庫以左上角為坐標(biāo)原點(diǎn),單位是px,所以上訴代碼復(fù)制了一個(gè) 200×200 pixels 的矩形選區(qū)。這個(gè)選區(qū)現(xiàn)在可以被處理并且粘貼到原圖。
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
當(dāng)你粘貼矩形選區(qū)的時(shí)候必須保證尺寸一致。此外,矩形選區(qū)不能在圖像外。然而你不必保證矩形選區(qū)和原圖的顏色模式一致,因?yàn)榫匦芜x區(qū)會(huì)被自動(dòng)轉(zhuǎn)換顏色。
5)分離和合并顏色通道
對(duì)于多通道圖像,有時(shí)候在處理時(shí)希望能夠分別對(duì)每個(gè)通道處理,處理完成后重新合成多通道,在Pillow中,很簡(jiǎn)單,如下:
r,g,b,a = im.split()
im = Image.merge("RGB", (r,g,b,a))
對(duì)于split( )函數(shù),如果是單通道的,則返回其本身,否則,返回各個(gè)通道。
6)幾何變換
對(duì)圖像進(jìn)行幾何變換是一種基本處理,在Pillow中包括resize( )和rotate( ),如用法如下:
out = im.resize((128,128))
out = im.rotate(45) # degree conter-clockwise
resize( )函數(shù)的參數(shù)是一個(gè)新圖像大小的元祖, rotate( )則需要輸入順時(shí)針的旋轉(zhuǎn)角度。rotate是基于Image.transform()函數(shù)的封裝,想要深入了解PIL的可以參見下一篇文章。
7)顏色空間變換
在處理圖像時(shí),根據(jù)需要進(jìn)行顏色空間的轉(zhuǎn)換,如將彩色轉(zhuǎn)換為灰度:
cmyk = im.convert("CMYK")
gray = im.convert("L")
8)圖像濾波
圖像濾波在ImageFilter 模塊中,在該模塊中,預(yù)先定義了很多增強(qiáng)濾波器,可以通過filter( )函數(shù)使用,預(yù)定義濾波器包括: BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值濾波,CONTOUR找輪廓,FIND_EDGES邊緣檢測(cè),使用該模塊時(shí),需先導(dǎo)入,使用方法如下:
from PIL import ImageFilter
imgF = Image.open("E:/photoshop/lena.jpg")
outF = imgF.filter(ImageFilter.DETAIL)
conF = imgF.filter(ImageFilter.CONTOUR)
edgeF = imgF.filter(ImageFilter.FIND_EDGES)
imgF.show()
outF.show()
conF.show()
edgeF.show()
除此以外,ImageFilter模塊還包括一些擴(kuò)展性強(qiáng)的濾波器,更多詳細(xì)內(nèi)容可以參考:PIL/ImageFilter
9)圖像增強(qiáng)
圖像增強(qiáng)也是圖像預(yù)處理中的一個(gè)基本技術(shù),Pillow中的圖像增強(qiáng)函數(shù)主要在ImageEnhance模塊下,通過該模塊可以調(diào)節(jié)圖像的顏色、對(duì)比度和飽和度和銳化等:
from PIL import ImageEnhance
imgE = Image.open("./lena.jpg")
imgEH = ImageEnhance.Contrast(imgE)
imgEH.enhance(1.3).show("30% more contrast")
除了以上介紹的內(nèi)容外,Pillow還有很多強(qiáng)大的功能:
PIL.Image.alpha_composite(im1, im2)
PIL.Image.blend(im1, im2, alpha)
PIL.Image.composite(image1, image2, mask)
PIL.Image.eval(image, *args)
PIL.Image.fromarray(obj, mode=None)
PIL.Image.frombuffer(mode, size, data, decoder_name=’raw’, *args)
總結(jié)
以上是生活随笔為你收集整理的pillow python 划线_Python-PIL(pillow)图片处理入门(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: warshall算法求传递闭包c++_【
- 下一篇: mysql慢查询日志轮转_MySQL s