python-pillow圖像處理

安裝 pip3 install pillow   spa

PIL中所涉及的基本概念有以下幾個:通道(bands)、模式(mode)、尺寸(size)、座標系統(coordinate system)、調色板(palette)、信息(info)和濾波器(filters)code

一、  通道orm

以RGB圖像爲例,每張圖片都是由三個數據通道構成,分別爲R、G和B通道。而對於灰度圖像,則只有一個通道視頻

二、  模式對象

圖像的模式定義了圖像的類型和像素的位寬。當前支持以下模式:blog

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

三、  尺寸 圖片

經過size屬性能夠獲取圖片的尺寸。這是一個二元組,包含水平和垂直方向上的像素數 ip

四、  座標系統 get

PIL使用笛卡爾像素座標系統,座標(0,0)位於左上角。注意:座標值表示像素的角;位於座標(0,0)處的像素的中心實際上位於(0.5,0.5)。it

座標常常用於二元組(x,y)。長方形則表示爲四元組,前面是左上角座標。例如,一個覆蓋800x600的像素圖像的長方形表示爲(0,0,800,600)

五、  調色板

調色板模式 ("P")使用一個顏色調色板爲每一個像素定義具體的顏色值

六、  信息

使用info屬性能夠爲一張圖片添加一些輔助信息。這個是字典對象。加載和保存圖像文件時,多少信息須要處理取決於文件格式

七、  濾波器

對於將多個輸入像素映射爲一個輸出像素的幾何操做,PIL提供了4個不一樣的採樣濾波器:

NEAREST:最近濾波。從輸入圖像中選取最近的像素做爲輸出像素。它忽略了全部其餘的像素。
BILINEAR:雙線性濾波。在輸入圖像的2x2矩陣上進行線性插值。注意:PIL的當前版本,作下采樣時該濾波器使用了固定輸入模板。
BICUBIC:雙立方濾波。在輸入圖像的4x4矩陣上進行立方插值。注意:PIL的當前版本,作下采樣時該濾波器使用了固定輸入模板。
ANTIALIAS:平滑濾波。這是PIL 1.1.3版本中新的濾波器。對全部能夠影響輸出像素的輸入像素進行高質量的重採樣濾波,以計算輸出像素值。在當前的PIL版本中,這個濾波器只用於改變尺寸和縮略圖方法。
注意:在當前的PIL版本中,ANTIALIAS濾波器是下采樣(例如,將一個大的圖像轉換爲小圖)時惟一正確的濾波器。BILIEAR和BICUBIC濾波器使用固定的輸入模板,用於固定比例的幾何變換和上採樣是最好的
from PIL import Image
im=Image.open(r'./大象.jpg')  #打開圖像
#im.show()  #顯示圖像
#打開的圖像能夠是jpg、bmp、png、GIF等
print(im.format)  #返回圖像的格式
#PNG
print(im.size)  #返回圖像的大小
#(499, 334)
im1 = im.resize((256,256))  #圖像的縮放
#返回的是新圖像,不是在原來的圖像上縮放
print(im.getbands())  #返回通道的名稱
#('R', 'G', 'B')
print(im.mode)  #返回圖像的模式
#RGB
print(print(im.info))  #返回圖片信息
#{'dpi': (96, 96)}
#None
print(im.palette)  #顏色調色板表格
#若是圖像的模式是「P」,則返回ImagePalette類的實例;不然,將爲None
print(im.getpixel((100, 50)))  #返回指定座標的顏色值
#(191, 191, 191)
#im.putpixel((100,50),(255,0,0))  #給指定座標值賦值顏色
#im.save('pp.bmp')  #保存圖像---只要是支持的格式就行
im2=im.rotate(90)  #支持任意角度的旋轉--單位度--正數逆時針
#transpose支持部分特殊角度的旋轉,如90、180、270、水平和垂直翻轉
im3=im.transpose(Image.ROTATE_270)  #逆時針旋轉270度
#Image.ROTATE_90   逆時針旋轉90度
#im4=im.transpose(Image.FLIP_LEFT_RIGHT)
#Image.ROTATE_270
im4=im.transpose(Image.FLIP_LEFT_RIGHT)  #左右翻轉
im5=im.transpose(Image.FLIP_TOP_BOTTOM)  #上下翻轉

box=(120,194,220,294)  #區域
im6=im.crop(box)  #裁剪
im6=im6.transpose(Image.ROTATE_180)
#im.paste(im6,box)  #把圖像im6粘貼到圖像im上

 

from PIL import ImageFilter,Image
im=Image.open(r'./彩色.jpg')

im5=im.filter(ImageFilter.DETAIL)  #圖像加強
im6=im.filter(ImageFilter.BLUR)  #圖像模糊
im7=im.filter(ImageFilter.FIND_EDGES)  #圖像邊緣提取
im8=im.point(lambda i:i*1.3)  #修改亮度
#使每一個點的亮度加強1.3倍

#圖像加強方式二
from PIL import ImageEnhance
enh=ImageEnhance.Brightness(im)
im9=enh.enhance(1.3)

enh1=ImageEnhance.Contrast(im)
#須要  from PIL import ImageEnhance
im10=enh1.enhance(1.3) #對比度加強1.3倍

#紅綠藍分別處理
r,g,b=im.split()  #把圖像分割成紅綠藍三個子圖
r=r.point(lambda i:i*1.3)
g=g.point(lambda i:i*0.9)
b=r.point(lambda i:0)
im11=Image.merge(im.mode,(r,g,b))  #把三個子圖合併成一個圖像
im11.show()

 

from PIL import ImageFilter,Image
im=Image.open(r'./彩色.jpg')

im5=im.filter(ImageFilter.DETAIL)  #圖像加強
im6=im.filter(ImageFilter.BLUR)  #圖像模糊
im7=im.filter(ImageFilter.FIND_EDGES)  #圖像邊緣提取
im8=im.point(lambda i:i*1.3)  #修改亮度
#使每一個點的亮度加強1.3倍

#圖像加強方式二
from PIL import ImageEnhance
enh=ImageEnhance.Brightness(im)
im9=enh.enhance(1.3)

enh1=ImageEnhance.Contrast(im)
#須要  from PIL import ImageEnhance
im10=enh1.enhance(1.3) #對比度加強1.3倍

#紅綠藍分別處理
r,g,b=im.split()  #把圖像分割成紅綠藍三個子圖
r=r.point(lambda i:i*1.3)
g=g.point(lambda i:i*0.9)
b=r.point(lambda i:0)
im11=Image.merge(im.mode,(r,g,b))  #把三個子圖合併成一個圖像
im11.show()

 

 

 

 

 

天子驕龍

相關文章
相關標籤/搜索