PIL基礎(chǔ)介紹
python Image Library也就是PIL庫惜颇,是python用于圖像處理的庫,其中包含了常見基礎(chǔ)的圖像處理算法旧巾。
PIL官網(wǎng)介紹
PIL中有很多類舒裤,核心類型是Image,其中打開圖片的函數(shù)就在Image中袁梗。
from PIL import Image
img = Image.open('test.jpg')
print img.format, img.size, img.mode
#JPEG (333, 351) RGB
- format 屬性指定了圖像文件的格式宜鸯,如果圖像不是從文件中加載的則為None。
- size 屬性是一個(gè)2個(gè)元素的元組遮怜,包含圖像寬度和高度(像素)淋袖。
- mode 屬性定義了像素格式,常用的像素格式為:“L” (luminance) - 灰度圖, “RGB” , “CMYK”锯梁。
1.PIL基礎(chǔ)操作
讀寫圖片
img = Image.open('test.jpg')
img.thumbnail((50,50))
img.save('test2.png')
PIL只有在需要的時(shí)候才加載像素?cái)?shù)據(jù)即碗。當(dāng)你打開一個(gè)文件時(shí),PIL只是讀取文件頭獲得文件格式陌凳、圖像模式剥懒、圖像大小等屬性,而像素?cái)?shù)據(jù)只有在需要的時(shí)候才會(huì)加載合敦。img中并沒有保存所有的像素信息蕊肥。上面的程序并保存的其實(shí)就是縮略圖。
2.圖片剪切蛤肌、粘貼壁却、合并
圖像剪切、旋轉(zhuǎn)裸准、粘貼
img = Image.open('test.jpg')
box = (100,100,200,200)
region = img.crop(box)
region = region.transpose(Image.ROTATE_180)
img.paste(region, box)
坐標(biāo)原點(diǎn)位于左上角展东。上面的例子提取的子區(qū)域包含100x100個(gè)像素。將該部分進(jìn)行旋轉(zhuǎn)炒俱,并粘貼會(huì)原本位置盐肃。
- 1.分割:split() 函數(shù)創(chuàng)建一個(gè)圖像集合,每個(gè)圖像包含一個(gè)通道权悟。
- 2.合并:merge()函數(shù)接受一個(gè)顏色模式和一個(gè)圖像元組砸王,然后將它們合并為一個(gè)新的圖像。接下來的例子交換了一個(gè)RGB圖像的三個(gè)通道峦阁。
r, g, b = im.split()
im = Image.merge("RGB", (b, g, r));
3.縮放谦铃、旋轉(zhuǎn)
out = im.resize((128, 128),Image.BILINEAR)
out = im.resize((128, 128))
out = im.rotate(45)
rotate和transpose結(jié)果、性能沒有什么區(qū)別榔昔,但又更通用的圖像變換函數(shù)為transform()驹闰。
4.統(tǒng)計(jì)直方圖
Image類實(shí)例的histogram()方法能夠?qū)χ狈綀D數(shù)據(jù)進(jìn)行統(tǒng)計(jì)瘪菌,并將結(jié)果做為一個(gè)列表(list)返回。
rot_img.histogram()
- histogram()直方圖數(shù)據(jù)進(jìn)行統(tǒng)計(jì)嘹朗,并將結(jié)果做為一個(gè)列表(list)返回
5.顏色模式轉(zhuǎn)換
im = Image.open("lena.ppm").convert("L")
1 (1-bit 像素, 黑白, 一個(gè)像素存儲(chǔ)為一個(gè)字節(jié))
L (8-bit 像素, 黑白)
P (8-bit 像素, 使用調(diào)色板映射到其他任一模式)
RGB (3x8-bit 像素, 真彩色)
RGBA (4x8-bit 像素, 帶透明掩模的真彩色)
CMYK (4x8-bit 像素, colour separation)
YCbCr (3x8-bit 像素, colour video format)
I (32-bit integer 像素)
F (32-bit floating point 像素)
RGBX (true colour with padding)
RGBa (true colour with premultiplied alpha)
- PIL庫支持從其他模式轉(zhuǎn)為“L”或“RGB”模式师妙,其他模式之間轉(zhuǎn)換,則需要使用一個(gè)中間圖像屹培,通常是“RGB”圖像默穴。
6.圖像增強(qiáng)
增強(qiáng)
- ImageEnhance模塊
這個(gè)模塊提供了一個(gè)常用的圖像增強(qiáng)工具箱⊥市悖可以用來進(jìn)行色彩增強(qiáng)壁顶、亮度增強(qiáng)、對(duì)比度增強(qiáng)溜歪、圖像尖銳化等等增強(qiáng)操作券敌。所有操作都有相同形式的接口——通過相應(yīng)類的enhance方法實(shí)現(xiàn):色彩增強(qiáng)通過Color類的enhance方法實(shí)現(xiàn)府框;亮度增強(qiáng)通過Brightness類的enhance方法實(shí)現(xiàn)角骤;對(duì)比度增強(qiáng)通過Contrast類的enhance方法實(shí)現(xiàn)裙士;尖銳化通過Sharpness類的enhance方法實(shí)現(xiàn)。所有的操作都需要向類的構(gòu)造函數(shù)傳遞一個(gè)Image對(duì)象作為參數(shù)自阱,這個(gè)參數(shù)定義了增強(qiáng)作用的對(duì)象嚎莉。同時(shí)所有的操作都返回一個(gè)新的Image對(duì)象。如果傳給enhance方法的參數(shù)是1.0沛豌,則不對(duì)原圖像做任何改變趋箩,直接返回原圖像的一個(gè)拷貝。
該模塊只有Color加派、Contrast叫确、Sharpness、Brightness四個(gè)類芍锦;并且每個(gè)類都只有兩個(gè)函數(shù)init和enhance函數(shù)竹勉,并且這四個(gè)類的使用方式和成員函數(shù)的使用方式也都是一樣的(只需要一個(gè)factor因子)。
from PIL import Image, ImageEnhance
img = Image.open("test.jpg")
# 增強(qiáng)亮度
enhanceImg = ImageEnhance.Brightness(img)
# 圖片尖銳化
enhanceImg = ImageEnhance.Sharpness(img)
# 對(duì)比度增強(qiáng)
enhanceImg = ImageEnhance.Contrast(img)
# 色彩增強(qiáng)
enhanceImg = ImageEnhance.Color(img)
enhanceImg.enhance(2.0).show()
通過調(diào)用ImageEnhance模塊中的不同類娄琉,使用enhance方法次乓,可以得到增強(qiáng)后的圖片。
過濾器
- ImageFilter是PIL的濾鏡模塊孽水,當(dāng)前版本支持10種加強(qiáng)濾鏡票腰,通過這些預(yù)定義的濾鏡,可以方便的對(duì)圖片進(jìn)行一些過濾操作女气,從而去掉圖片中的噪音(部分的消除)杏慰,這樣可以降低將來處理的復(fù)雜度(如模式識(shí)別等)
濾鏡名稱 | 含義 |
---|---|
ImageFilter.BLUR | 模糊濾鏡 |
ImageFilter.CONTOUR | 輪廓 |
ImageFilter.DETAIL | |
ImageFilter.EDGE_ENHANCE | 邊界加強(qiáng) |
ImageFilter.EDGE_ENHANCE_MORE | 邊界加強(qiáng)(閥值更大) |
ImageFilter.EMBOSS | 浮雕濾鏡 |
ImageFilter.FIND_EDGES | 邊界濾鏡 |
ImageFilter.SMOOTH | 平滑濾鏡 |
ImageFilter.SMOOTH_MORE | 平滑濾鏡(閥值更大) |
ImageFilter.SHARPEN | 銳化濾鏡 |
import ImageFilter
out = im.filter(ImageFilter.DETAIL)
更多詳細(xì)內(nèi)容請(qǐng)看:
http://blog.csdn.net/u013467442/article/details/41827085