欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)

系統(tǒng) 1789 0

? Image模塊

Image模塊是在Python PIL圖像處理中常見的模塊,對圖像進(jìn)行基礎(chǔ)操作的功能基本都包含于此模塊內(nèi)。如open、save、conver、show…等功能。

open類

Image.open(file) ? image
Image.open(file, mode) ? image

要從文件加載圖像,使用 open() 函數(shù), 在 Image 模塊:

            
 @zhangziju
 from PIL import Image    ##調(diào)用庫
 im = Image.open("E:\mywife.jpg") ##文件存在的路徑
 im.show() 
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第1張圖片

需要知道的是在win的環(huán)境下im.show的方式為win自帶的圖像顯示應(yīng)用。打開并確認(rèn)給定的圖像文件。這個是一個懶操作;該函數(shù)只會讀文件頭,而真實(shí)的圖像數(shù)據(jù)直到試圖處理該數(shù)據(jù)才會從文件讀取(調(diào)用load()方法將強(qiáng)行加載圖像數(shù)據(jù))。如果變量mode被設(shè)置,那必須是“r”。用戶可以使用一個字符串(表示文件名稱的字符串)或者文件對象作為變量file的值。文件對象必須實(shí)現(xiàn)read(),seek()和tell()方法,并且以二進(jìn)制模式打開。

Save類

im.save(outfile,options…)
im.save(outfile, format, options…)

若要保存文件,則使用 Image 類的 save() 方法,此時保存文件的文件名就變得十分重要了,除非指定格式,否則這個庫將會以文件名的擴(kuò)展名作為格式保存。使用給定的文件名保存圖像。如果變量format缺省,如果可能的話,則從文件名稱的擴(kuò)展名判斷文件的格式。該方法返回為空。關(guān)鍵字options為文件編寫器提供一些額外的指令。如果編寫器不能識別某個選項(xiàng),它將忽略它。用戶可以使用文件對象代替文件名稱。在這種情況下,用戶必須指定文件格式。文件對象必須實(shí)現(xiàn)了seek()、tell()和write()方法,且其以二進(jìn)制模式打開。如果方法save()因?yàn)槟承┰蚴。@個方法將產(chǎn)生一個異常(通常為IOError異常)。如果發(fā)生了異常,該方法也有可能已經(jīng)創(chuàng)建了文件,并向文件寫入了一些數(shù)據(jù)。如果需要的話,用戶的應(yīng)用程序可以刪除這個不完整的文件。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im)
im.save("E:\mywife.png")  ## 將"E:\mywife.jpg"保存為"E:\mywife.png"
im = Image.open("E:\mywife.png") ##打開新的png圖片
print(im.format, im.size, im.mode)
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第2張圖片 ?

如下圖,在指定路徑下可看到新保存的png格式的圖片。

format類

im.format ? string or None

這個屬性標(biāo)識了圖像來源,如果圖像不是從文件讀取它的值就是None。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.format) ## 打印出格式信息
im.show()
          

如下圖可以看到其format為”JPEG”。

Mode類

im.mode ? string

圖像的模式,常見的mode 有 “L” (luminance) 表示灰度圖像,“RGB”表示真彩色圖像,和 “CMYK” 表示出版圖像,表明圖像所使用像素格式。如下表為常見的nodes描述:

modes 描述
1 1位像素,黑和白,存成8位的像素
L 8位像素,黑白
P 8位像素,使用調(diào)色板映射到任何其他模式
RGB 3× 8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,顏色隔離
YCbCr 3×8位像素,彩色視頻格式
I 32位整型像素
F 32位浮點(diǎn)型像素

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.mode) ## 打印出模式信息
im.show()
          

?如下圖為圖片的mode為“RGB”模式。

convert類

im.convert(mode)? image

將當(dāng)前圖像轉(zhuǎn)換為其他模式,并且返回新的圖像。當(dāng)從一個調(diào)色板圖像轉(zhuǎn)換時,這個方法通過這個調(diào)色板來轉(zhuǎn)換像素。如果不對變量mode賦值,該方法將會選擇一種模式,在沒有調(diào)色板的情況下,使得圖像和調(diào)色板中的所有信息都可以被表示出來。當(dāng)從一個顏色圖像轉(zhuǎn)換為黑白圖像時,PIL庫使用ITU-R601-2 luma轉(zhuǎn)換公式:

L = R * 299/1000 + G * 587/1000 + B * 114/1000

當(dāng)轉(zhuǎn)換為2位圖像(模式“1”)時,源圖像首先被轉(zhuǎn)換為黑白圖像。結(jié)果數(shù)據(jù)中大于127的值被設(shè)置為白色,其他的設(shè)置為黑色;這樣圖像會出現(xiàn)抖動。如果要使用其他閾值,更改閾值127,可以使用方法point()。為了去掉圖像抖動現(xiàn)象,可以使用dither選項(xiàng)。

            
from PIL import Image
im = Image.open("E:\mywife.jpg")
new_im = im.convert('P')
print(new_im.mode)
new_im.show()
          

如下,將圖像轉(zhuǎn)換為“P”模式。

?

對比原始圖像。

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第3張圖片

im.convert(“P”,**options) ? image

這個與第一個方法定義一樣,但是當(dāng)“RGB”圖像轉(zhuǎn)換為8位調(diào)色板圖像時能更好的處理。可供選擇的選項(xiàng)為:

Dither=. 控制顏色抖動。默認(rèn)是FLOYDSTEINBERG,與鄰近的像素一起承擔(dān)錯誤。不使能該功能,則賦值為NONE。

Palette=. 控制調(diào)色板的產(chǎn)生。默認(rèn)是WEB,這是標(biāo)準(zhǔn)的216色的“web palette”。要使用優(yōu)化的調(diào)色板,則賦值為ADAPTIVE。

Colors=. 當(dāng)選項(xiàng)palette為ADAPTIVE時,控制用于調(diào)色板的顏色數(shù)目。默認(rèn)是最大值,即256種顏色

im.convert(mode,matrix) ? image

使用轉(zhuǎn)換矩陣將一個“RGB”圖像轉(zhuǎn)換為“L”或者“RGB”圖像。變量matrix為4或者16元組。

            
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.mode)
rgb2xyz = (0.412453,0.357580, 0.180423, 0,
   0.212671,0.715160, 0.072169, 0,
   0.019334,0.119193, 0.950227, 0 )
new_im = im.convert("L", rgb2xyz)
print(new_im.mode)
new_im.show()
          

?

轉(zhuǎn)換后效果

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第4張圖片

Size類

im.size ? (width, height)

圖像的尺寸,按照像素?cái)?shù)計(jì)算,它的返回值為寬度和高度的二元組(width, height)。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size) ## 打印出尺寸信息
im.show()
          

如下圖所示為圖片的尺寸信息,750*560。

Palette類

im.palette ? palette or None

顏色調(diào)色板表格。如果圖像的模式是“P”,則返回ImagePalette類的實(shí)例;否則,將為None。
如下為對非“P”模式下的圖像進(jìn)行palette信息顯示。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.palette)
          

易知,返回值為空,none

?

對圖像進(jìn)行convert操作,轉(zhuǎn)換成“P”模式

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
new_im = im.convert('P')
print(new_im.mode)
print(new_im.palette)
          

則返回值為ImagePalette類的實(shí)例。如下:

Info類

im.info ? dictionary

存儲圖像相關(guān)數(shù)據(jù)的字典。文件句柄使用該字典傳遞從文件中讀取的各種非圖像信息。大多數(shù)方法在返回新的圖像時都會忽略這個字典;因?yàn)樽值渲械逆I并非標(biāo)準(zhǔn)化的,對于一個方法,它不能知道自己的操作如何影響這個字典。如果用戶需要這些信息,需要在方法open()返回時保存這個字典。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.info)
          

new類

Image.new(mode,size) ? image
Image.new(mode, size,color) ? image

使用給定的變量mode和size生成新的圖像。Size是給定的寬/高二元組,這是按照像素?cái)?shù)來計(jì)算的。對于單通道圖像,變量color只給定一個值;對于多通道圖像,變量color給定一個元組(每個通道對應(yīng)一個值)。在版本1.1.4及其之后,用戶也可以用顏色的名稱,比如給變量color賦值為“red”。如果沒有對變量color賦值,圖像內(nèi)容將會被全部賦值為0(為黑色)。如果變量color是空,圖像將不會被初始化,即圖像的內(nèi)容全為0。這對向該圖像復(fù)制或繪制某些內(nèi)容是有用的。

如下為將圖像設(shè)置為128x128大小的紅色圖像。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
n_im= Image.new("RGB", (128, 128), "#FF0000")
n_im.show()
          

顯示效果如下:

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第5張圖片 ?

如下圖像為128x128大小的黑色圖像,因?yàn)樽兞縞olor不賦值的話,圖像內(nèi)容被設(shè)置為0,即黑色。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
n_im= Image.new("RGB", (128, 128))
n_im.show()
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第6張圖片 ?

圖像為128x128大小的綠色圖像。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
n_im= Image.new("RGB", (128, 128),"green")
n_im.show()
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第7張圖片

Copy類

im.copy() ? image

拷貝這個圖像。如果用戶想粘貼一些數(shù)據(jù)到這張圖,可以使用這個方法,但是原始圖像不會受到影響。

            
from PIL import Image
im = Image.open("E:\mywife.jpg")
im_copy = im.copy()
          

圖像im_copy和im完全一樣。

Crop類

im.crop(box) ? image

從當(dāng)前的圖像中返回一個矩形區(qū)域的拷貝。變量box是一個四元組,定義了左、上、右和下的像素坐標(biāo)。用來表示在原始圖像中截取的位置坐標(biāo),如box(100,100,200,200)就表示在原始圖像中以左上角為坐標(biāo)原點(diǎn),截取一個100*100(像素為單位)的圖像,為方便理解,如下為示意圖box(b1,a1,b2,a2)。作圖軟件為Visio2016。這是一個懶操作。對源圖像的改變可能或者可能不體現(xiàn)在裁減下來的圖像中。為了獲取一個分離的拷貝,對裁剪的拷貝調(diào)用方法load()。

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第8張圖片

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
box = (300, 100, 700, 700)    ##確定拷貝區(qū)域大小
region = im.crop(box)     ##將im表示的圖片對象拷貝到region中,大小為box
region.show()
          

如下圖為box截取的圖像區(qū)域顯示。

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第9張圖片

Paste類

im.paste(image,box)

將一張圖粘貼到另一張圖像上。變量box或者是一個給定左上角的2元組,或者是定義了左,上,右和下像素坐標(biāo)的4元組,或者為空(與(0,0)一樣)。如果給定4元組,被粘貼的圖像的尺寸必須與區(qū)域尺寸一樣。如果模式不匹配,被粘貼的圖像將被轉(zhuǎn)換為當(dāng)前圖像的模式。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
box=[0,0,100,100]
im_crop = im.crop(box)
print(im_crop.size,im_crop.mode)
im.paste(im_crop, (100,100))    ##(100,100,0,0)
im.paste(im_crop, (400,400,500,500))
im.show()
          

如下圖為paste操作:

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第10張圖片

Filter類

im.filter(filter) ? image

返回一個使用給定濾波器處理過的圖像的拷貝。具體參考圖像濾波在ImageFilter 模塊的應(yīng)用,在該模塊中,預(yù)先定義了很多增強(qiáng)濾波器,可以通過filter( )函數(shù)使用,預(yù)定義濾波器包括:BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值濾波,CONTOUR找輪廓,F(xiàn)IND_EDGES邊緣檢測,使用該模塊時,需先導(dǎo)入。

            
@zhangziju
from PIL import Image
from PIL import ImageFilter       ## 調(diào)取ImageFilter
imgF = Image.open("E:\mywife.jpg")
bluF = imgF.filter(ImageFilter.BLUR)    ##均值濾波
conF = imgF.filter(ImageFilter.CONTOUR)    ##找輪廓
edgeF = imgF.filter(ImageFilter.FIND_EDGES)   ##邊緣檢測
imgF.show()
bluF.show()
conF.show()
edgeF.show()
          

濾波處理下的gakki~

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第11張圖片

Blend類

Image.blend(image1,image2, alpha) ? image

使用給定的兩張圖像及透明度變量alpha,插值出一張新的圖像。這兩張圖像必須有一樣的尺寸和模式。

合成公式為:out = image1 (1.0 - alpha) + image2 alpha

若變量alpha為0.0,返回第一張圖像的拷貝。若變量alpha為1.0,將返回第二張圖像的拷貝。對變量alpha的值無限制。

            
@zhangziju
from PIL import Image
im1 = Image.open("E:\mywife.jpg")
im2 = Image.open("E:\mywife2.jpg")
print(im1.mode,im1.size)
print(im2.mode,im2.size)
im = Image.blend(im1, im2, 0.2)
im.show()
          

需保證兩張圖像的模式和大小是一致的,如下為顯示im1和im2的具體信息。

?

im1和im2按照第一張80%的透明度,第二張20%的透明度,合成為一張。

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第12張圖片

Split

im.split() ? sequence

返回當(dāng)前圖像各個通道組成的一個元組。例如,分離一個“RGB”圖像將產(chǎn)生三個新的圖像,分別對應(yīng)原始圖像的每個通道(紅,綠,藍(lán))。

            
from PIL import Image
im = Image.open("E:\mywife.jpg")
r,g,b = im.split()
print(r.mode)
print(r.size)
print(im.size)
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第13張圖片

Composite類

Image.composite(image1,image2, mask) ? image

復(fù)合類使用給定的兩張圖像及mask圖像作為透明度,插值出一張新的圖像。變量mask圖像的模式可以為“1”,“L”或者“RGBA”。所有圖像必須有相同的尺寸。

            
@zhangziju
from PIL import Image
im1 = Image.open("E:\mywife.jpg")
im2 = Image.open("E:\mywife2.jpg")
r,g,b = im1.split()    ##分離出r,g,b
print(b.mode)
print(im1.mode,im1.size)
print(im2.mode,im2.size)
im = Image.composite(im1,im2,b)
im.show()
          

b.mode為”L”,兩圖尺寸一致。

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第14張圖片 ?

最終效果

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第15張圖片

Eval類

Image.eval(image,function) ? image

使用變量function對應(yīng)的函數(shù)(該函數(shù)應(yīng)該有一個參數(shù))處理變量image所代表圖像中的每一個像素點(diǎn)。如果變量image所代表圖像有多個通道,那變量function對應(yīng)的函數(shù)作用于每一個通道。注意:變量function對每個像素只處理一次,所以不能使用隨機(jī)組件和其他生成器。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
def fun01(x):
 return x*0.3
def fun02(y):
 return y*2.0
im1_eval = Image.eval(im, fun01)
im2_eval = Image.eval(im, fun02)
im1_eval.show()
im2_eval.show()
          

在函數(shù)fun01和fun02下的圖像顯示。

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第16張圖片

Merge類

Image.merge(mode,bands) ? image

合并類使用一些單通道圖像,創(chuàng)建一個新的圖像。變量bands為一個圖像的元組或者列表,每個通道的模式由變量mode描述。所有通道必須有相同的尺寸。
變量mode與變量bands的關(guān)系:

len(ImageMode.getmode(mode).bands)= len(bands)

            
@zhangziju
from PIL import Image
im1 = Image.open("E:\mywife.jpg")
im2 = Image.open("E:\mywife2.jpg")
r1,g1,b1 = im1.split()
r2,g2,b2 = im2.split()
print(r1.mode,r1.size,g1.mode,g1.size)
print(r2.mode,r2.size,g2.mode,g2.size)
new_im=[r1,g2,b2]
print(len(new_im))
im_merge = Image.merge("RGB",new_im)
im_merge.show()
          

打印信息顯示

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第17張圖片 ?

merge操作

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第18張圖片

Draft類

im.draft(mode,size)

配置圖像文件加載器,使得返回一個與給定的模式和尺寸盡可能匹配的圖像的版本。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size,im.mode)
new_im = im.draft("L", (200,200))
print(new_im.size,new_im.mode)
new_im.show()
          

關(guān)鍵信息顯示

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第19張圖片 ?

轉(zhuǎn)換效果

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第20張圖片

Getbands類

im.getbands()? tuple of strings

返回包括每個通道名稱的元組。例如,對于RGB圖像將返回(“R”,“G”,“B”)。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.getbands())
          

Getbbox類

im.getbbox() ? 4-tuple or None

計(jì)算圖像非零區(qū)域的包圍盒。這個包圍盒是一個4元組,定義了左、上、右和下像素坐標(biāo)。如果圖像是空的,這個方法將返回空。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.getbbox())
          

Getdata類

im.getdata() ? sequence

以包含像素值的sequence對象形式返回圖像的內(nèi)容。這個sequence對象是扁平的,以便第一行的值直接跟在第零行的值后面,等等。這個方法返回的sequence對象是PIL內(nèi)部數(shù)據(jù)類型,它只支持某些sequence操作,包括迭代和基礎(chǔ)sequence訪問。使用list(im.getdata()),將它轉(zhuǎn)換為普通的sequence。Sequence對象的每一個元素對應(yīng)一個像素點(diǎn)的R、G和B三個值。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
sequ = im.getdata()
sequ0 = list(sequ)
print(sequ0[0])
print(sequ0[1])
print(sequ0[2])
          

可視化顯示sequence0里面的數(shù)據(jù)。

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第21張圖片 ?

打印顯示結(jié)果,與前面對比。

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第22張圖片

Getextrema類

im.getextrema() ? 2-tuple

返回一個2元組,包括該圖像中的最小和最大值。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.getextrema())
          

該方法返回了R/G/B三個通道的最小和最大值的2元組。

Getpixel類

im.getpixel(xy) ? value or tuple

返回給定位置的像素值。如果圖像為多通道,則返回一個元組。該方法執(zhí)行比較慢;如果用戶需要使用python處理圖像中較大部分?jǐn)?shù)據(jù),可以使用像素訪問對象(見load),或者方法getdata()。

            
@zahngziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.getpixel((0,0)))
print(im.getpixel((4,0)))
r,g,b = im.split()
print(b.getpixel((11,8))) 
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第23張圖片

Histogram類

im.histogram()? list

返回一個圖像的直方圖。這個直方圖是關(guān)于像素?cái)?shù)量的list,圖像中的每個象素值對應(yīng)一個成員。如果圖像有多個通道,所有通道的直方圖會連接起來(例如,“RGB”圖像的直方圖有768個值)。二值圖像(模式為“1”)當(dāng)作灰度圖像(模式為“L”)處理。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
imhis = im.histogram()
print(len(imhis))
print(imhis[0])
print(imhis[150])
print(imhis[300])
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第24張圖片

im.histogram(mask)? list

返回圖像中模板圖像非零地方的直方圖。模板圖像與處理圖像的尺寸必須相同,并且要么是二值圖像(模式為“1”),要么為灰度圖像(模式為“L”)。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
r,g,b = im.split()
imhis = im.histogram()
print(r.mode)
print(len(imhis))
print(imhis[0])
print(imhis[150])
print(imhis[300])
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第25張圖片

Load類

im.load()

為圖像分配內(nèi)存并從文件中加載它(或者從源圖像,對于懶操作)。正常情況下,用戶不需要調(diào)用這個方法,因?yàn)樵诘谝淮卧L問圖像時,Image類會自動地加載打開的圖像。在1.1.6及以后的版本,方法load()返回一個用于讀取和修改像素的像素訪問對象。這個訪問對象像一個二維隊(duì)列,如:

pix = im.load()
print pix[x, y]
pix[x, y] =value

通過這個對象訪問比方法getpixel()和putpixel()快很多。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
pix = im.load()
print(pix[0,2])
          

im.paste(colour,box)

使用同一種顏色填充變量box對應(yīng)的區(qū)域。對于單通道圖像,變量colour為單個顏色值;對于多通道,則為一個元組。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
im.paste((256,256,0),(0,0,100,100)) ##(256,256,0)表示黃色
im.show()
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第26張圖片

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
im.paste("blue",(0,0,100,100)) ##或者“blue”
im.show()
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第27張圖片

im.paste(image,box, mask)

使用變量mask對應(yīng)的模板圖像來填充所對應(yīng)的區(qū)域。可以使用模式為“1”、“L”或者“RGBA”的圖像作為模板圖像。模板圖像的尺寸必須與變量image對應(yīng)的圖像尺寸一致。如果變量mask對應(yīng)圖像的值為255,則模板圖像的值直接被拷貝過來;如果變量mask對應(yīng)圖像的值為0,則保持當(dāng)前圖像的原始值。變量mask對應(yīng)圖像的其他值,將對兩張圖像的值進(jìn)行透明融合,如果變量image對應(yīng)的為“RGBA”圖像,即粘貼的圖像模式為“RGBA”,則alpha通道被忽略。用戶可以使用同樣的圖像作為原圖像和模板圖像。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
box=[300,300,400,400]
im_crop =im.crop(box)
r,g,b =im_crop.split()
im.paste(im_crop, (200,200,300,300), r)
im.show()
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第28張圖片

Putdata類

im.putdata(data)
im.putdata(data, scale, offset)

從sequence對象中拷貝數(shù)據(jù)到當(dāng)前圖像,從圖像的左上角(0,0)位置開始。變量scale和offset用來調(diào)整sequence中的值:

pixel = value*scale + offset

如果變量scale忽略,則默認(rèn)為1.0。如果變量offset忽略,則默認(rèn)為0.0。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
r, g, b = im.split()
print(
r.getpixel((0, 0)),
r.getpixel((1, 0)),
r.getpixel((2, 0)),
r.getpixel((3, 0)),
r.putdata([1, 2, 3, 4]),
r.getpixel((0, 0)),
r.getpixel((1, 0)),
r.getpixel((2, 0)),
r.getpixel((3, 0)),
)
          

Resize類

im.resize(size) ? image
im.resize(size, filter) ? image

返回改變尺寸的圖像的拷貝。變量size是所要求的尺寸,是一個二元組:(width, height)。變量filter為NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者圖像模式為“1”或者“P”,該變量設(shè)置為NEAREST。在當(dāng)前的版本中bilinear和bicubic濾波器不能很好地適應(yīng)大比例的下采樣(例如生成縮略圖)。用戶需要使用ANTIALIAS,除非速度比質(zhì)量更重要。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
region = im.resize((400, 400))  ##重新設(shè)定大小
region.show()
          

很明顯由于大小的重新設(shè)定,圖片的顯示效果有所轉(zhuǎn)變,gakki依然美膩~

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第29張圖片

Rotate類

im.rotate(angle) ? image
im.rotate(angle,filter=NEAREST, expand=0) ? image

返回一個按照給定角度順時鐘圍繞圖像中心旋轉(zhuǎn)后的圖像拷貝。變量filter是NEAREST、BILINEAR或者BICUBIC之一。如果省略該變量,或者圖像模式為“1”或者“P”,則默認(rèn)為NEAREST。變量expand,如果為true,表示輸出圖像足夠大,可以裝載旋轉(zhuǎn)后的圖像。如果為false或者缺省,則輸出圖像與輸入圖像尺寸一樣大。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
im_45 = im.rotate(45)
im_30 = im.rotate(30, Image.NEAREST,1)
print(im_45.size,im_30.size)
im_45.show()
im_30.show()
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第30張圖片

Seek類

im.seek(frame)

在給定的文件序列中查找指定的幀。如果查找超越了序列的末尾,則產(chǎn)生一個EOFError異常。當(dāng)文件序列被打開時,PIL庫自動指定到第0幀上。

            
@zhangziju
from PIL import Image
im_gif = Image.open("E:\mywife.gif")
print(im_gif.mode)
im_gif.show() ##第0幀
im_gif.seek(3)
im_gif.show()
im_gif.seek(9)
im_gif.show()
          

來來來~這是gakki原圖欣賞下~

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第31張圖片 ?

查找?guī)瑂eek()的效果如下:

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第32張圖片

Tell類

im.tell() ? integer

返回當(dāng)前幀所處位置,從0開始計(jì)算。

            
@zhangziju
from PIL import Image
im_gif = Image.open("E:\mywife.gif")
print(im_gif.tell())
im_gif.seek(8)
print(im_gif.tell())
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第33張圖片

Thumbnail類

im.thumbnail(size)
im.thumbnail(size, filter)

修改當(dāng)前圖像,使其包含一個自身的縮略圖,該縮略圖尺寸不大于給定的尺寸。這個方法會計(jì)算一個合適的縮略圖尺寸,使其符合當(dāng)前圖像的寬高比,調(diào)用方法draft()配置文件讀取器,最后改變圖像的尺寸。變量filter應(yīng)該是NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果省略該變量,則默認(rèn)為NEAREST。注意:在當(dāng)前PIL的版本中,濾波器bilinear和bicubic不能很好地適應(yīng)縮略圖產(chǎn)生。用戶應(yīng)該使用ANTIALIAS,圖像質(zhì)量最好。如果處理速度比圖像質(zhì)量更重要,可以選用其他濾波器。這個方法在原圖上進(jìn)行修改。如果用戶不想修改原圖,可以使用方法copy()拷貝一個圖像。這個方法返回空。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
im.thumbnail((100,100))
          

Transform類

im.transform(size,method, data) ? image
im.transform(size, method, data, filter) ? image

使用給定的尺寸生成一張新的圖像,與原圖有相同的模式,使用給定的轉(zhuǎn)換方式將原圖數(shù)據(jù)拷貝到新的圖像中。在當(dāng)前的PIL版本中,參數(shù)method為EXTENT(裁剪出一個矩形區(qū)域),AFFINE(仿射變換),QUAD(將正方形轉(zhuǎn)換為矩形),MESH(一個操作映射多個正方形)或者PERSPECTIVE。變量filter定義了對原始圖像中像素的濾波器。在當(dāng)前的版本中,變量filter為NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者圖像模式為“1”或者“P”,該變量設(shè)置為NEAREST。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size)
imtra = im.transform((200, 200), Image.EXTENT, (0, 0, 500, 500))
print(imtra.size)
imtra.show()
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第34張圖片

im.transform(size,EXTENT, data) ? image
im.transform(size, EXTENT, data, filter) ? image

從圖像中裁剪一個區(qū)域。變量data為指定輸入圖像中兩個坐標(biāo)點(diǎn)的4元組(x0,y0,x1,y1)。輸出圖像為這兩個坐標(biāo)點(diǎn)之間像素的采樣結(jié)果。例如,如果輸入圖像的(x0,y0)為輸出圖像的(0,0)點(diǎn),(x1,y1)則與變量size一樣。這個方法可以用于在當(dāng)前圖像中裁剪,放大,縮小或者鏡像一個任意的長方形。它比方法crop()稍慢,但是與resize操作一樣快。

im.transform(size, AFFINE, data) ? image
im.transform(size, AFFINE,data, filter) ? image

對當(dāng)前的圖像進(jìn)行仿射變換,變換結(jié)果體現(xiàn)在給定尺寸的新圖像中。變量data是一個6元組(a,b,c,d,e,f),包含一個仿射變換矩陣的第一個兩行。輸出圖像中的每一個像素(x,y),新值由輸入圖像的位置(ax+by+c, dx+ey+f)的像素產(chǎn)生,使用最接近的像素進(jìn)行近似。這個方法用于原始圖像的縮放、轉(zhuǎn)換、旋轉(zhuǎn)和裁剪。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size)
imtra = im.transform((200, 200), Image.AFFINE, (1,2,3,2,1,4))
print(imtra.size)
imtra.show()
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第35張圖片 ?

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第36張圖片

im.transform(size,QUAD, data) ? image
im.transform(size, QUAD, data, filter) ? image

輸入圖像的一個四邊形(通過四個角定義的區(qū)域)映射到給定尺寸的長方形。變量data是一個8元組(x0,y0,x1,y1,x2,y2,x3,y3),它包括源四邊形的左上,左下,右下和右上四個角。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size)
imtra = im.transform((200, 200), Image.QUAD, (0,0,0,500,600,500,600,0))
print(imtra.size)
imtra.show()
          

?

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第37張圖片

im.transform(size,PERSPECTIVE, data) ? image
im.transform(size, PERSPECTIVE, data, filter) ? image

對當(dāng)前圖像進(jìn)行透視變換,產(chǎn)生給定尺寸的新圖像。變量data是一個8元組(a,b,c,d,e,f,g,h),包括一個透視變換的系數(shù)。對于輸出圖像中的每個像素點(diǎn),新的值來自于輸入圖像的位置的(a x + b y + c)/(g x + h y + 1), (d x+ e y + f)/(g x + h y + 1)像素,使用最接近的像素進(jìn)行近似。這個方法用于原始圖像的2D透視。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size)
imtra = im.transform((200, 200), Image.PERSPECTIVE, (1,2,3,2,1,6,1,2))
print(imtra.size)
imtra.show()
          

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第38張圖片 ?

wocao!!!gakki不見了!!!

Python圖像處理PIL各模塊詳細(xì)介紹(推薦)_第39張圖片

Transpose類

im.transpose(method)? image

返回當(dāng)前圖像的翻轉(zhuǎn)或者旋轉(zhuǎn)的拷貝。變量method的取值為:FLIP_LEFT_RIGHT,F(xiàn)LIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,或ROTATE_270。

            
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
im.rotate(45)        #逆時針旋轉(zhuǎn) 45 度角。
im.transpose(Image.FLIP_LEFT_RIGHT)  #左右對換。
im.transpose(Image.FLIP_TOP_BOTTOM)  #上下對換。
im.transpose(Image.ROTATE_90)    #旋轉(zhuǎn) 90 度角。
im.transpose(Image.ROTATE_180)   #旋轉(zhuǎn) 180 度角。
im.transpose(Image.ROTATE_270)   #旋轉(zhuǎn) 270 度角。
          

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天摸天天揉天天碰天天弄 | 2级毛片| 91在线精品秘密一区二区 | 婷婷综合 在线 | α片毛片 | 久久亚洲国产精品五月天婷 | 日韩精品成人 | 成人亚洲 | 日韩电影中文字幕 | 手机看片国产免费现在观看 | 91精品一区二区三区久久久久久 | 欧美一页 | 自拍偷拍视频网站 | 国产成人综合久久精品红 | 国产亚洲综合一区二区在线 | 美国一级毛片片aaa 香蕉视频在线观看免费 | 欧美淫片| 91福利免费观看 | 久久久久亚洲 | 婷婷精品 | 999精品免费视频观看 | 日韩电影中文字幕 | 污污的网站免费观看 | 国产在线视频网 | 国产一区二区黑人欧美xxxx | 男人午夜小视频 | 欧美成人午夜剧场 | 婷婷射丁香 | 欧美一级黄视频 | 亚洲第一区视频在线观看 | 亚洲www在线 | 久久久久久中文字幕 | 在线视频二区 | 人人人人干 | 久久精品免费人成人A片 | 午夜影院在线播放 | 日本视频网站在线观看 | 国产精品久久久久久久y | 亚洲人成网站在线播放观看 | 天天天天综合 | 久久在线免费视频 |