真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何操作Python圖片處理模塊PIL-創(chuàng)新互聯(lián)

本篇內(nèi)容介紹了“如何操作Python圖片處理模塊PIL”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)是一家專業(yè)提供博山企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、成都網(wǎng)站建設(shè)、H5頁(yè)面制作、小程序制作等業(yè)務(wù)。10年已為博山眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

python可以做什么

Python是一種編程語(yǔ)言,內(nèi)置了許多有效的工具,Python幾乎無(wú)所不能,該語(yǔ)言通俗易懂、容易入門、功能強(qiáng)大,在許多領(lǐng)域中都有廣泛的應(yīng)用,例如最熱門的大數(shù)據(jù)分析,人工智能,Web開(kāi)發(fā)等。

一、PIL的基本概念:

PIL中所涉及的基本概念有如下幾個(gè):通道(bands)、模式(mode)、尺寸(size)、坐標(biāo)系統(tǒng)(coordinate system)、調(diào)色板(palette)、信息(info)和濾波器(filters)。

1、通道

每張圖片都是由一個(gè)或者多個(gè)數(shù)據(jù)通道構(gòu)成。PIL允許在單張圖片中合成相同維數(shù)和深度的多個(gè)通道。

以RGB圖像為例,每張圖片都是由三個(gè)數(shù)據(jù)通道構(gòu)成,分別為R、G和B通道。而對(duì)于灰度圖像,則只有一個(gè)通道。

對(duì)于一張圖片的通道數(shù)量和名稱,可以通過(guò)方法getbands()來(lái)獲取。方法getbands()是Image模塊的方法,它會(huì)返回一個(gè)字符串元組(tuple)。該元組將包括每一個(gè)通道的名稱。

Python的元組與列表類似,不同之處在于元組的元素不能修改,元組使用小括號(hào),列表使用方括號(hào),元組創(chuàng)建很簡(jiǎn)單,只需要在括號(hào)中添加元素,并使用逗號(hào)隔開(kāi)即可。

方法getbands()的使用如下:

from PIL import Image
im = Image.open("xiao.png")
print(im.getbands())
輸出:
('R', 'G', 'B')

2、模式

圖像的模式定義了圖像的類型和像素的位寬。當(dāng)前支持如下模式:

1:1位像素,表示黑和白,但是存儲(chǔ)的時(shí)候每個(gè)像素存儲(chǔ)為8bit。
L:8位像素,表示黑和白。
P:8位像素,使用調(diào)色板映射到其他模式。
RGB:3x8位像素,為真彩色。
RGBA:4x8位像素,有透明通道的真彩色。
CMYK:4x8位像素,顏色分離。
YCbCr:3x8位像素,彩色視頻格式。
I:32位整型像素。
F:32位浮點(diǎn)型像素。
PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。

可以通過(guò)mode屬性讀取圖像的模式。其返回值是包括上述模式的字符串。

屬性mode的使用如下:

from PIL import Image
im = Image.open("xiao.png")
print(im.mode)
輸出:
'RGB'

3、尺寸

通過(guò)size屬性可以獲取圖片的尺寸。這是一個(gè)二元組,包含水平和垂直方向上的像素?cái)?shù)。

屬性mode的使用如下:

from PIL import Image
im = Image.open("xiao.png")
print(im.size)
輸出:
(670, 502)

4、坐標(biāo)系統(tǒng)

PIL使用笛卡爾像素坐標(biāo)系統(tǒng),坐標(biāo)(0,0)位于左上角。注意:坐標(biāo)值表示像素的角;位于坐標(biāo)(0,0)處的像素的中心實(shí)際上位于(0.5,0.5)。

坐標(biāo)經(jīng)常用于二元組(x,y)。長(zhǎng)方形則表示為四元組,前面是左上角坐標(biāo)。例如,一個(gè)覆蓋800x600的像素圖像的長(zhǎng)方形表示為(0,0,800,600)。

5、調(diào)色板

調(diào)色板模式("P")使用一個(gè)顏色調(diào)色板為每個(gè)像素定義具體的顏色值

6、信息

使用info屬性可以為一張圖片添加一些輔助信息。這個(gè)是字典對(duì)象。加載和保存圖像文件時(shí),多少信息需要處理取決于文件格式。

屬性info的使用如下:

from PIL import Image
im = Image.open("xiao.png")
print(im.info)
輸出:
{}

7、濾波器

對(duì)于將多個(gè)輸入像素映射為一個(gè)輸出像素的幾何操作,PIL提供了4個(gè)不同的采樣濾波器:

NEAREST:最近濾波。從輸入圖像中選取最近的像素作為輸出像素。它忽略了所有其他的像素。
BILINEAR:雙線性濾波。在輸入圖像的2x2矩陣上進(jìn)行線性插值。注意:PIL的當(dāng)前版本,做下采樣時(shí)該濾波器使用了固定輸入模板。
BICUBIC:雙立方濾波。在輸入圖像的4x4矩陣上進(jìn)行立方插值。注意:PIL的當(dāng)前版本,做下采樣時(shí)該濾波器使用了固定輸入模板。
ANTIALIAS:平滑濾波。這是PIL 1.1.3版本中新的濾波器。對(duì)所有可以影響輸出像素的輸入像素進(jìn)行高質(zhì)量的重采樣濾波,以計(jì)算輸出像素值。在當(dāng)前的PIL版本中,這個(gè)濾波器只用于改變尺寸和縮略圖方法。
注意:在當(dāng)前的PIL版本中,ANTIALIAS濾波器是下采樣(例如,將一個(gè)大的圖像轉(zhuǎn)換為小圖)時(shí)唯一正確的濾波器。BILIEAR和BICUBIC濾波器使用固定的輸入模板,用于固定比例的幾何變換和上采樣是最好的。

Image模塊中的方法resize()和thumbnail()用到了濾波器。

方法resize()的使用如下:

方法resize()的定義為:resize(size, filter=None)=> imagefrom PIL import Image
im = Image.open("xiao.png")
print(im.size)im_resize = im.resize((256,256))print(im_resize.size)輸出:(670, 502)(256,256)

對(duì)參數(shù)filter不賦值的話,方法resize()默認(rèn)使用NEAREST濾波器。如果要使用其他濾波器可以通過(guò)下面的方法來(lái)實(shí)現(xiàn):

from PIL import Image
im = Image.open("xiao.png")
print(im.size)
im_resize0 = im.resize((256,256), Image.BILINEAR)
print(im_resize0.size)im_resize1 = im.resize((256,256), Image.BICUBIC)
print(im_resize1.size)im_resize2 = im.resize((256,256), Image.ANTIALIAS)
print(im_resize2.size)
輸出:(670, 502)(256,256)(256,256)(256,256)

二、Image模塊:

Image模塊是PIL中最重要的模塊,它有一個(gè)類叫做image,與模塊名稱相同。Image類有很多函數(shù)、方法及屬性,接下來(lái)將依次對(duì)image類的屬性、函數(shù)和方法進(jìn)行介紹。

一、Image類的屬性

1、Format

定義:im.format ? string or None
含義:源文件的文件格式。如果是由PIL創(chuàng)建的圖像,則其文件格式為None。
例子:
from PIL import Image
im= Image.open("xiao.png")
print(im.format)
輸出:
'png'

2、Mode

定義:im.mode ? string
含義:圖像的模式。這個(gè)字符串表明圖像所使用像素格式。該屬性典型的取值為“1”,“L”,“RGB”或“CMYK”。

3、Size

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

4、Palette

定義:im.palette ? palette or None
含義:顏色調(diào)色板表格。如果圖像的模式是“P”,則返回ImagePalette類的實(shí)例;否則,將為None。
例子:
from PIL import Image
im = Image.open("jing.jpg")
print(im.mode)
print(im.palette)
輸出: 
RGB
None

5、Info

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

二、類的函數(shù):

1、New

定義:Image.new(mode,size) ? image
 Image.new(mode, size, color) ? image
含義:使用給定的變量mode和size生成新的圖像。Size是給定的寬/高二元組,這是按照像素?cái)?shù)來(lái)計(jì)算的。對(duì)于單通道圖像,變量color只給定一個(gè)值;對(duì)于多通道圖像,變量color給定一個(gè)元組(每個(gè)通道對(duì)應(yīng)一個(gè)值)。 在版本1.1.4及其之后,用戶也可以用顏色的名稱,比如給變量color賦值為“red”。如果沒(méi)有對(duì)變量color賦值,圖像內(nèi)容將會(huì)被全部賦值為0(圖像即為黑色)。如果變量color是空,圖像將不會(huì)被初始化,即圖像的內(nèi)容全為0。 這對(duì)向該圖像復(fù)制或繪制某些內(nèi)容是有用的。
例子:
from PIL import Image
im= Image.new("RGB", (128, 128), "#FF0000")
im.save("test1.png") #圖像im為128x128大小的紅色圖像。
im= Image.new("RGB", (128, 128)) #圖像im為128x128大小的黑色圖像,因?yàn)樽兞縞olor不賦值的話,圖像內(nèi)容被設(shè)置為0,即黑色。
im.save("test2.png")im= Image.new("RGB", (128, 128), "red") #圖像im為128x128大小的紅色圖像。im.save("test3.png")

2、Open

定義:Image.open(file) ? image
 Image.open(file, mode) ? image
含義:打開(kāi)并確認(rèn)給定的圖像文件。這個(gè)是一個(gè)懶操作;該函數(shù)只會(huì)讀文件頭,而真實(shí)的圖像數(shù)據(jù)直到試圖處理該數(shù)據(jù)才會(huì)從文件讀?。ㄕ{(diào)用load()方法將強(qiáng)行加載圖像數(shù)據(jù))。如果變量mode被設(shè)置,那必須是“r”。
 用戶可以使用一個(gè)字符串(表示文件名稱的字符串)或者文件對(duì)象作為變量file的值。文件對(duì)象必須實(shí)現(xiàn)read(),seek()和tell()方法,并且以二進(jìn)制模式打開(kāi)。
例子:
from PIL import Image
im = Image.open("xiao.png")

3、Blend

定義:Image.blend(image1,image2, alpha) ? image
含義:使用給定的兩張圖像及透明度變量alpha,插值出一張新的圖像。這兩張圖像必須有一樣的尺寸和模式。
 合成公式為:out = image1 *(1.0 - alpha) + image2 * alpha
 如果變量alpha為0.0,將返回第一張圖像的拷貝。如果變量alpha為1.0,將返回第二張圖像的拷貝。對(duì)變量alpha的值沒(méi)有限制。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
im2 = Image.open("wu.jpg")
im = Image.blend(im1,im2,0.5)
im.save("he.jpg")

4、Composite

定義:Image.composite(image1,image2, mask) ? image
含義:使用給定的兩張圖像及mask圖像作為透明度,插值出一張新的圖像。變量mask圖像的模式可以為“1”,“L”或者“RGBA”。所有圖像必須有相同的尺寸。
例子:
from PIL import Image
im1 = Image.open("jing.jpg")
im2 = Image.open("wu.jpg")
r,g,b = im1.split()
print(g.mode)
im = Image.composite(im1,im2,b)
im.save("he.jpg")
b.save("he1.jpg")

5、Eval

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

from PIL import Image
im = Image.open("jing.jpg")
def deffun(c):
 return c*0.89 #改變了亮度
im_eval = Image.eval(im,deffun) 
im_eval.save("gai.jpg")注:圖像im_eval與im01比較,其像素值均為im01的一半,則其亮度自然也會(huì)比im01暗一些。

6、Frombuffer

定義:Image.frombuffer(mode,size, data) ? image
     Image.frombuffer(mode, size,data, decoder, parameters) ? image
含義:(New in PIL 1.1.4)使用標(biāo)準(zhǔn)的“raw”解碼器,從字符串或者buffer對(duì)象中的像素?cái)?shù)據(jù)產(chǎn)生一個(gè)圖像存儲(chǔ)。對(duì)于一些模式,這個(gè)圖像存儲(chǔ)與原始的buffer(這意味著對(duì)原始buffer對(duì)象的改變體現(xiàn)在圖像本身)共享內(nèi)存。      并非所有的模式都可以共享內(nèi)存;支持的模式有“L”,“RGBX”,“RGBA”和“CMYK”。對(duì)于其他模式,這個(gè)函數(shù)與fromstring()函數(shù)一致。
注意:版本1.1.6及其以下,這個(gè)函數(shù)的默認(rèn)情況與函數(shù)fromstring()不同。這有可能在將來(lái)的版本中改變,所以為了大的可移植性,當(dāng)使用“raw”解碼器時(shí),推薦用戶寫(xiě)出所有的參數(shù),如下所示:
im =Image.frombuffer(mode, size, data, "raw", mode, 0, 1)
函數(shù)Image.frombuffer(mode,size, data, decoder, parameters)與函數(shù)fromstring()的調(diào)用一致。

7、Fromstring

定義:Image.fromstring(mode,size, data) ? image
     Image.fromstring(mode, size,data, decoder, parameters) ? image
含義:函數(shù)Image.fromstring(mode,size, data),使用標(biāo)準(zhǔn)的“raw”解碼器,從字符串中的像素?cái)?shù)據(jù)產(chǎn)生一個(gè)圖像存儲(chǔ)。
函數(shù)Image.fromstring(mode,size, data, decoder, parameters)也一樣,但是允許用戶使用PIL支持的任何像素解碼器。更多信息可以參考:Writing YourOwn File Decoder.
注意:這個(gè)函數(shù)只對(duì)像素?cái)?shù)據(jù)進(jìn)行解碼,而不是整個(gè)圖像。如果用戶的字符串包含整個(gè)圖像,可以將該字符串包裹在StringIO對(duì)象中,使用函數(shù)open()來(lái)加載。

8、Merge

定義:Image.merge(mode,bands) ? image
含義:使用一些單通道圖像,創(chuàng)建一個(gè)新的圖像。變量bands為一個(gè)圖像的元組或者列表,每個(gè)通道的模式由變量mode描述。所有通道必須有相同的尺寸。
變量mode與變量bands的關(guān)系:
len(ImageMode.getmode(mode).bands)= len(bands)
例子:
from PIL import Image
im1 = Image.open("jing.jpg")
im2 = Image.open("wu.jpg")
r1,g1,b1 = im1.split()
r2,g2,b2 = im2.split()
imgs =[r1,g2,b2]
im_merge = Image.merge("RGB",imgs)
im_merge.save("he.jpg")

三、Image類的方法

除非另作說(shuō)明,Image類的所有方法都將返回一個(gè)Image類的新實(shí)例,這個(gè)實(shí)例對(duì)應(yīng)于結(jié)果圖像。

1、Convert

定義1:im.convert(mode)? image
含義1:將當(dāng)前圖像轉(zhuǎn)換為其他模式,并且返回新的圖像。
當(dāng)從一個(gè)調(diào)色板圖像轉(zhuǎn)換時(shí),這個(gè)方法通過(guò)這個(gè)調(diào)色板來(lái)轉(zhuǎn)換像素。如果不對(duì)變量mode賦值,該方法將會(huì)選擇一種模式,在沒(méi)有調(diào)色板的情況下,使得圖像和調(diào)色板中的所有信息都可以被表示出來(lái)。
當(dāng)從一個(gè)顏色圖像轉(zhuǎn)換為黑白圖像時(shí),PIL庫(kù)使用ITU-R601-2 luma轉(zhuǎn)換公式:
L = R * 299/1000 + G * 587/1000 + B * 114/1000
當(dāng)轉(zhuǎn)換為2位圖像(模式“1”)時(shí),源圖像首先被轉(zhuǎn)換為黑白圖像。結(jié)果數(shù)據(jù)中大于127的值被設(shè)置為白色,其他的設(shè)置為黑色;這樣圖像會(huì)出現(xiàn)抖動(dòng)。如果要使用其他閾值,更改閾值127,可以使用方法point()。為了去掉圖像抖動(dòng)現(xiàn)象,可以使用dither選項(xiàng)?!?例子1:
from PIL import Image
im1 = Image.open("jing.jpg")
print(im1.mode)
im_c = im1.convert("1")
im_c.save("he.jpg")
print(im_c.mode)
輸出:1
注:將“RGB”模式的im01圖像,轉(zhuǎn)換為“1”模式的im_c圖像。

定義2:im.convert(“P”,**options) ? image
含義2:這個(gè)與第一個(gè)方法定義一樣,但是當(dāng)“RGB”圖像轉(zhuǎn)換為8位調(diào)色板圖像時(shí)能更好的處理??晒┻x擇的選項(xiàng)為:
 Dither=. 控制顏色抖動(dòng)。默認(rèn)是FLOYDSTEINBERG,與鄰近的像素一起承擔(dān)錯(cuò)誤。不使能該功能,則賦值為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時(shí),控制用于調(diào)色板的顏色數(shù)目。默認(rèn)是大值,即256種顏色。
 
定義3:im.convert(mode,matrix) ? image
含義3:使用轉(zhuǎn)換矩陣將一個(gè)“RGB”圖像轉(zhuǎn)換為“L”或者“RGB”圖像。變量matrix為4或者16元組。
例子3:下面的例子將一個(gè)RGB圖像(根據(jù)ITU-R709線性校準(zhǔn),使用D65亮度)轉(zhuǎn)換到CIE XYZ顏色空間:
from PIL import Image
im1 = Image.open("jing.jpg")
im1.mode
rgb2xyz = (
 0.412453, 0.357580, 0.180423, 0,
 0.212671, 0.715160, 0.072169, 0,
 0.019334, 0.119193, 0.950227, 0 )
im_c3 = im1.convert("L", rgb2xyz)
im_c3.save("he.jpg")
print(im_c3.mode)輸出:L

2、Copy

定義:im.copy() ? image
含義:拷貝這個(gè)圖像。如果用戶想粘貼一些數(shù)據(jù)到這張圖,可以使用這個(gè)方法,但是原始圖像不會(huì)受到影響。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
im2 = im1.copy()
im2.save("he.jpg")
注:圖像im_copy和im01完全一樣。

3、Crop

定義:im.crop(box) ? image
含義:從當(dāng)前的圖像中返回一個(gè)矩形區(qū)域的拷貝。變量box是一個(gè)四元組,定義了左、上、右和下的像素坐標(biāo)。
這是一個(gè)懶操作。對(duì)源圖像的改變可能或者可能不體現(xiàn)在裁減下來(lái)的圖像中。為了獲取一個(gè)分離的拷貝,對(duì)裁剪的拷貝調(diào)用方法load()。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
print(im1.size)
box = [0,0,650,400] #650(長(zhǎng))400(高)
im_crop = im1.crop(box)
im_crop.save("he.jpg")

4、Draft

定義:im.draft(mode,size)
含義:配置圖像文件加載器,使得返回一個(gè)與給定的模式和尺寸盡可能匹配的圖像的版本。例如,用戶可以使用這個(gè)方法,在加載一個(gè)彩色JPEG圖像時(shí)將其轉(zhuǎn)換為灰色圖像,或者從一個(gè)PCD文件中提取一個(gè)128x192的版本。
注意:這個(gè)方法會(huì)適時(shí)地修改圖像對(duì)象(精確地說(shuō),它會(huì)重新配置文件的讀取器)。如果圖像已經(jīng)被加載,那這個(gè)方法就沒(méi)有作用了。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
im_draft = im1.draft("L",(500,500))
print(im_draft.size)
im_draft.save("he.jpg")
輸出:
(650, 650)

5、 Filter

定義:im.filter(filter) ? image
含義:返回一個(gè)使用給定濾波器處理過(guò)的圖像的拷貝??捎脼V波器需要參考ImageFilter模塊。

例子:
from PIL import Image,ImageFilter
im1 = Image.open("jing.jpg")
im_filter = im1.filter(ImageFilter.BLUR)
im_filter.save("he.jpg")
注:圖像im_filter比im01變得有些模糊了。

6、 Fromstring

定義:im.fromstring(data)
     im.fromstring(data, decoder,parameters)
含義:與函數(shù)fromstring()一樣,但是這個(gè)方法會(huì)將data加載到當(dāng)前的圖像中。

7、 Getbands

定義:im.getbands()? tuple of strings
含義:返回包括每個(gè)通道名稱的元組。例如,對(duì)于RGB圖像將返回(“R”,“G”,“B”)。

8、 Getbbox

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

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
print(im1.getbbox())
輸出:
(0, 0, 650, 650)

9、Getcolors

定義:im.getcolors() ? a list of(count, color) tuples or None
 im.getcolors(maxcolors) ? a list of (count, color) tuples or None
含義:(New in 1.1.5)返回一個(gè)(count,color)元組的無(wú)序list,其中count是對(duì)應(yīng)顏色在圖像中出現(xiàn)的次數(shù)。
如果變量maxcolors的值被超過(guò),該方法將停止計(jì)算并返回空。變量maxcolors默認(rèn)值為256。為了保證用戶可以獲取圖像中的所有顏色,you can pass in size[0]*size[1](請(qǐng)確保有足夠的內(nèi)存做這件事)。

例子:
from PIL import Image
im1 = Image.open("test.png")
print(im1.getcolors(8888888))輸出:[(2, (255, 255, 255, 233)), (9, (0, 0, 0, 136)), (1, (0, 0, 0, 64)), (2, (0, 0, 0, 24)), (5, (0, 0, 0, 56)).......

10、 Getdata

定義:im.getdata() ? sequence
含義:以包含像素值的sequence對(duì)象形式返回圖像的內(nèi)容。這個(gè)sequence對(duì)象是扁平的,以便第一行的值直接跟在第零行的值后面,等等。
注意:這個(gè)方法返回的sequence對(duì)象是PIL內(nèi)部數(shù)據(jù)類型,它只支持某些sequence操作,包括迭代和基礎(chǔ)sequence訪問(wèn)。使用list(im.getdata()),將它轉(zhuǎn)換為普通的sequence。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
seq = im1.getdata()
print(seq[0])
seq0 = list(seq)
print(seq0[0])
print(len(seq0))
輸出:
(41, 183, 197)
(41, 183, 197)
 #這個(gè)值是長(zhǎng)和高之積

注:Sequence對(duì)象的每一個(gè)元素對(duì)應(yīng)一個(gè)像素點(diǎn)的R、G和B三個(gè)值。

11、 Getextrema

定義:im.getextrema() ? 2-tuple
含義:返回一個(gè)2元組,包括該圖像中的最小和大值。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
print(im1.getextrema())
輸出:
((0, 255), (0,255), (0, 255)) 
該方法返回了R/G/B三個(gè)通道的最小和大值的2元組。

12、 Getpixel

定義:im.getpixel(xy) ? value or tuple
含義:返回給定位置的像素值。如果圖像為多通道,則返回一個(gè)元組。
注意:該方法執(zhí)行比較慢;如果用戶需要使用python處理圖像中較大部分?jǐn)?shù)據(jù),可以使用像素訪問(wèn)對(duì)象(見(jiàn)load),或者方法getdata()。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
print(im1.getpixel((1,1)))
print(im1.getpixel((649,649)))
輸出:
(41, 183, 197)
(236, 210, 153)注:im.getpixel(xy)中的X,Y表示坐標(biāo),從0開(kāi)始。

13、 Histogram

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

例子1:
from PIL import Image
im1 = Image.open("jing.jpg")
ls = im1.histogram()
print(len(ls))
print(ls[767])
輸出:
1471

14、 Load

定義:im.load()
含義:為圖像分配內(nèi)存并從文件中加載它(或者從源圖像,對(duì)于懶操作)。正常情況下,用戶不需要調(diào)用這個(gè)方法,因?yàn)樵诘谝淮卧L問(wèn)圖像時(shí),Image類會(huì)自動(dòng)地加載打開(kāi)的圖像。

 (New in 1.1.6)在1.1.6及以后的版本,方法load()返回一個(gè)用于讀取和修改像素的像素訪問(wèn)對(duì)象。這個(gè)訪問(wèn)對(duì)象像一個(gè)二維隊(duì)列,如:
 pix = im.load()
 print pix[x, y]
 pix[x, y] =value
 通過(guò)這個(gè)對(duì)象訪問(wèn)比方法getpixel()和putpixel()快很多。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
lm_load = im1.load()
print(lm_load[649,649])
輸出:
(236, 210, 153)

15、Paste

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

例子1:
from PIL import Image
im1 = Image.open("jing.jpg")
box = [0,0,200,200]
im_crop = im1.crop(box)
im1.paste(im_crop,(200,200,400,400)) #等價(jià)于im1.paste(im_crop,(200,200))
im1.save("he.jpg")

定義2:im.paste(colour,box)
含義2:它與定義1一樣,但是它使用同一種顏色填充變量box對(duì)應(yīng)的區(qū)域。對(duì)于單通道圖像,變量colour為單個(gè)顏色值;對(duì)于多通道,則為一個(gè)元組。

例子2:
from PIL import Image
im1 = Image.open("jing.jpg")
im1.paste((256,256,256),(200,100,500,200))
im1.save("he.jpg")
注:圖像im1的(200,100)位置將出現(xiàn)一個(gè)300x100的白色方塊,對(duì)于多通道的圖像,如果變量colour只給定一個(gè)數(shù)值,將只會(huì)應(yīng)用于圖像的第一個(gè)通道。如果是“RGB”模式的圖像,將應(yīng)用于紅色通道。

定義3:im.paste(image,box, mask)
含義3:與定義1一樣,但是它使用變量mask對(duì)應(yīng)的模板圖像來(lái)填充所對(duì)應(yīng)的區(qū)域??梢允褂媚J綖椤?”、“L”或者“RGBA”的圖像作為模板圖像。模板圖像的尺寸必須與變量image對(duì)應(yīng)的圖像尺寸一致。 如果變量mask對(duì)應(yīng)圖像的值為255,則模板圖像的值直接被拷貝過(guò)來(lái);如果變量mask對(duì)應(yīng)圖像的值為0,則保持當(dāng)前圖像的原始值。變量mask對(duì)應(yīng)圖像的其他值,將對(duì)兩張圖像的值進(jìn)行透明融合。
注意:如果變量image對(duì)應(yīng)的為“RGBA”圖像,即粘貼的圖像模式為“RGBA”,則alpha通道被忽略。用戶可以使用同樣的圖像作為原圖像和模板圖像。

例子3:
from PIL import Image
im1 = Image.open("jing.jpg")
box = [100,100,200,200]
im_crop = im1.crop(box)
r,g,b = im_crop.split()
im1.paste(im_crop,(200,100,300,200),b)
im1.save("he.jpg")
注:在圖像im1的(0,0)位置將出現(xiàn)一個(gè)半透明的100x100的方塊。

定義4:im.paste(colour,box, mask)
含義4:與定義3一樣,只是使用變量colour對(duì)應(yīng)的單色來(lái)填充區(qū)域。
例子4:
from PIL import Image
im1 = Image.open("jing.jpg")
box = [100,100,200,200]
im_crop = im1.crop(box)
r,g,b = im_crop.split()
im1.paste((0,256,0),(200,100,300,200),b)
im1.save("he.jpg")
注:在圖像im1的(0,0)位置將出現(xiàn)一個(gè)100x100的綠色方塊。

總結(jié)

“如何操作Python圖片處理模塊PIL”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


分享名稱:如何操作Python圖片處理模塊PIL-創(chuàng)新互聯(lián)
文章路徑:http://weahome.cn/article/dogcoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部