首頁 > 軟體

python 包之 Pillow 影象處理教學分享

2022-04-12 04:00:02

一、安裝

  • 被認為是python官方影象處理庫
  • PIL非常適合於影象歸檔以及影象的批次處理任務。可以使用PIL建立縮圖,轉換影象格式,列印影象等等
  • PIL支援眾多的GUI框架介面,可以用於影象展示
  • PIL庫同樣支援影象的大小轉換,影象旋轉,以及任意的仿射變換
pip install Pillow

二、開啟圖片

from PIL import Image

im = Image.open("picture.jpg")
im.show()

三、轉換格式並儲存

from PIL import Image

im = Image.open("picture.jpg")
im.save("result.png")

四、建立縮圖

from PIL import Image

im = Image.open("picture.jpg")
im.thumbnail((128, 128))
im.save("result.jpg")

五、獲取圖片屬性

  • 獲取影象的來源,如果影象不是從檔案讀取它的值就是None。
from PIL import Image

im = Image.open("picture.jpg")
print(im.format)

六、圖片資訊

from PIL import Image

im = Image.open("picture.jpg")
print(im.info)

七、調色盤

  • 如果影象的模式是“P”,則返回Image  Palette類的範例;否則,將為None
from PIL import Image

im = Image.open("picture.jpg")
print(im.palette)

八、畫板

  • 使用給定的變數mode和size生成畫板
from PIL import Image

im= Image.new("RGB", (128, 128), "#FF0000")
im.show()

九、圖片模式

  • 影象的模式,常見如下
  • L:8位元畫素,黑白
  • P:9位畫素,使用調色盤對映到任何其他模式
  • 1:1位畫素,黑白影象,存成8位元畫素
  • RGB:3*8位元畫素,真彩
  • RGBA:4*8位元畫素,真彩+透明通道
  • CMYK:4*8位元畫素,印刷四色模式或彩色印刷模式
  • YCbCr:3*8位元畫素,色彩視訊格式
  • I:32位元整型畫素
  • F:33位浮點型畫素
from PIL import Image

im = Image.open("picture.jpg")
print(im.mode)

十、模式轉換

  • 將當前影象轉換為其他模式,並且返回新的影象
from PIL import Image

im = Image.open("picture.jpg")
new_im = im.convert('L')
print(new_im.mode)
new_im.show()

十一、矩陣模式轉換

  • 使用轉換矩陣將一個“RGB”影象轉換為“L”或者“RGB”影象
from PIL import Image

im = Image.open("picture.jpg")
print(im.mode)
matrix = (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", matrix)
print(new_im.mode)
new_im.show()

十二、圖片尺寸

  • 獲取影象的尺寸,按照畫素數計算,它的返回值為寬度和高度的二元組
from PIL import Image

im = Image.open("picture.jpg")
print(im.size)
 

十三、通道分離

  • 返回當前影象各個通道組成的一個元組
  • 分離一個 RGB 影象將產生三個新的影象
  • 分別對應原始影象的每個通道紅、綠、藍三張圖片
from PIL import Image

im = Image.open("picture.jpg")

r,g,b = im.split()
print(r.mode)
print(r.size)
print(im.size)

十四、複製、裁剪、貼上、合併

from PIL import Image

im = Image.open("picture.jpg")
# 複製
im.copy()
# 裁剪
im.crop((100, 100, 400, 400))
# 將一張圖貼上到另一張影象上
im.paste(im.transpose(Image.ROTATE_180),im)
# 合併類使用一些單通道影象,建立一個新的影象
Image.merge("RGB", im.split())

十五、幾何變換

  • Image類有resize()、rotate()和transpose()、transform()方法進行幾何變換
from PIL import Image

im = Image.open("picture.jpg")

# 修改尺寸
im.resize((128, 128))
# 角度旋轉
im.rotate(45)
# 返回當前影象的翻轉或者旋轉的拷貝
# 值為:FLIP_LEFT_RIGHT,FLIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,ROTATE_270
im.transpose(Image.ROTATE_90)
# 用給定的尺寸生成一張新的影象,與原圖有相同的模式
im.transform((200, 200), Image.EXTENT, (0, 0, 300, 300))

十六、高階圖片處理

  • 使用ImageEnhance物件就能快速地進行設定。 可以調整對比度、亮度、色平衡和銳利度
from PIL import Image
from PIL import ImageEnhance

im = Image.open("picture.jpg")
enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show("30% more contrast")

十七、濾波器處理

from PIL import Image
from PIL import ImageFilter

im = Image.open("picture.jpg")
# 均值濾波
im1 = im.filter(ImageFilter.BLUR)
# 找輪廓
im2 = im.filter(ImageFilter.CONTOUR)
# 邊緣檢測
im3 = im.filter(ImageFilter.FIND_EDGES)
im.show()
im1.show()
im2.show()
im3.show()

十八、設定透明度合成兩張圖

  • 使用給定的兩張影象及透明度變數alpha,生成一張新的影象
  • 變數alpha值在0和1之間
  • 若變數alpha為0.0,返回第一張影象的拷貝。若變數alpha為1.0,將返回第二張影象的拷貝。
from PIL import Image

im1 = Image.open("picture1.jpg")
im2 = Image.open("picture2.jpg")
im = Image.blend(im1, im2, 0.30)
im.show()

十九、設定模式合成兩張圖

  • 使用給定的兩張影象及mask影象作為透明度,生成一張新的影象
  • 影象的模式可以為“1”,“L”或者“RGBA”
  • 所有影象必須有相同的尺寸
from PIL import Image

im1 = Image.open("picture1.jpg")
im2 = Image.open("picture2.jpg")
im = Image.composite(im1, im2, 'L')
im.show()

二十、草稿模式

  • 速度要求比質量高的場合
  • 允許在不讀取檔案內容的情況下儘可能(可能不會完全等於給定的引數)地將圖片轉成給定模式和大小,這在生成縮圖的時候非常有效
from PIL import Image

im = Image.open("picture.jpg")

print(im.size,im.mode)
new_im = im.draft("L", (200,200))
print(new_im.size,new_im.mode)
new_im.show()

二十一、獲取通道名稱

  • 返回包括每個通道名稱的元組
  • 例如,對於RGB影象將返回(“R”,“G”,“B”)
from PIL import Image

im = Image.open("picture.jpg")
print(im.getbands())

二十二、獲取包圍盒

  • 計算影象非零區域的包圍盒
  • 這個包圍盒是一個4元組,定義了左、上、右和下畫素座標
  • 如果影象是空的,這個方法將返回空
from PIL import Image

im = Image.open("picture.jpg")
print(im.getbbox())

二十三、獲取畫素值

from PIL import Image

im = Image.open("picture.jpg")
print(im.getdata())

二十四、獲取圖片極值

  • 返回一個2元組
  • 包括該影象中的最小和最大值
from PIL import Image

im = Image.open("picture.jpg")
print(im.getextrema())

二十五、指定位置畫素值

from PIL import Image

im = Image.open("picture.jpg")
print(im.getpixel((10,0)))

二十六、獲取影象直方圖

from PIL import Image

im = Image.open("picture.jpg")
im_histogram = im.histogram()
print(im_histogram[0])

二十七、記憶體分配

  • 為影象分配記憶體並從檔案中載入它
  • 返回一個用於讀取和修改畫素的畫素存取物件
from PIL import Image

im = Image.open("picture.jpg")
pix = im.load()
print(pix[0,2])

二十八、查詢指定的幀

  • 給定的動態圖中查詢指定的幀
  • 如果查詢超越了序列的末尾,則產生一個EOFError異常
  • 當檔案被開啟時,PIL庫自動指定到第0幀上
from PIL import Image

im_gif = Image.open("loading.gif")
print(im_gif.mode)
# 預設開啟時是第0幀
im_gif.show()
im_gif.seek(1)
im_gif.show()
im_gif.seek(3)
im_gif.show()

二十九、獲取當前幀位置

from PIL import Image

im_gif = Image.open("loading.gif")
print(im_gif.tell())
im_gif.seek(3)
print(im_gif.tell())

到此這篇關於python 包之 Pillow 影象處理教學分享的文章就介紹到這了,更多相關python   Pillow 影象處理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com