python?包之?Pillow?圖像處理教程分享
一、安裝
- 被認(rèn)為是python官方圖像處理庫(kù)
- PIL非常適合于圖像歸檔以及圖像的批處理任務(wù)。可以使用PIL創(chuàng)建縮略圖,轉(zhuǎn)換圖像格式,打印圖像等等
- PIL支持眾多的GUI框架接口,可以用于圖像展示
- PIL庫(kù)同樣支持圖像的大小轉(zhuǎn)換,圖像旋轉(zhuǎn),以及任意的仿射變換
pip install Pillow
二、打開(kāi)圖片
from PIL import Image im = Image.open("picture.jpg") im.show()
三、轉(zhuǎn)換格式并保存
from PIL import Image im = Image.open("picture.jpg") im.save("result.png")
四、創(chuàng)建縮略圖
from PIL import Image im = Image.open("picture.jpg") im.thumbnail((128, 128)) im.save("result.jpg")
五、獲取圖片屬性
- 獲取圖像的來(lái)源,如果圖像不是從文件讀取它的值就是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)
七、調(diào)色板
- 如果圖像的模式是“P”,則返回Image Palette類(lèi)的實(shí)例;否則,將為None
from PIL import Image im = Image.open("picture.jpg") print(im.palette)
八、畫(huà)板
- 使用給定的變量mode和size生成畫(huà)板
from PIL import Image im= Image.new("RGB", (128, 128), "#FF0000") im.show()
九、圖片模式
- 圖像的模式,常見(jiàn)如下
- L:8位像素,黑白
- P:9位像素,使用調(diào)色板映射到任何其他模式
- 1:1位像素,黑白圖像,存成8位像素
- RGB:3*8位像素,真彩
- RGBA:4*8位像素,真彩+透明通道
- CMYK:4*8位像素,印刷四色模式或彩色印刷模式
- YCbCr:3*8位像素,色彩視頻格式
- I:32位整型像素
- F:33位浮點(diǎn)型像素
from PIL import Image im = Image.open("picture.jpg") print(im.mode)
十、模式轉(zhuǎn)換
- 將當(dāng)前圖像轉(zhuǎn)換為其他模式,并且返回新的圖像
from PIL import Image im = Image.open("picture.jpg") new_im = im.convert('L') print(new_im.mode) new_im.show()
十一、矩陣模式轉(zhuǎn)換
- 使用轉(zhuǎn)換矩陣將一個(gè)“RGB”圖像轉(zhuǎn)換為“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()
十二、圖片尺寸
- 獲取圖像的尺寸,按照像素?cái)?shù)計(jì)算,它的返回值為寬度和高度的二元組
from PIL import Image im = Image.open("picture.jpg") print(im.size) ?
十三、通道分離
- 返回當(dāng)前圖像各個(gè)通道組成的一個(gè)元組
- 分離一個(gè) RGB 圖像將產(chǎn)生三個(gè)新的圖像
- 分別對(duì)應(yīng)原始圖像的每個(gè)通道紅、綠、藍(lán)三張圖片
from PIL import Image im = Image.open("picture.jpg") r,g,b = im.split() print(r.mode) print(r.size) print(im.size)
十四、復(fù)制、裁剪、粘貼、合并
from PIL import Image im = Image.open("picture.jpg") # 復(fù)制 im.copy() # 裁剪 im.crop((100, 100, 400, 400)) # 將一張圖粘貼到另一張圖像上 im.paste(im.transpose(Image.ROTATE_180),im) # 合并類(lèi)使用一些單通道圖像,創(chuàng)建一個(gè)新的圖像 Image.merge("RGB", im.split())
十五、幾何變換
- Image類(lèi)有resize()、rotate()和transpose()、transform()方法進(jìn)行幾何變換
from PIL import Image im = Image.open("picture.jpg") # 修改尺寸 im.resize((128, 128)) # 角度旋轉(zhuǎn) im.rotate(45) # 返回當(dāng)前圖像的翻轉(zhuǎn)或者旋轉(zhuǎn)的拷貝 # 值為:FLIP_LEFT_RIGHT,F(xiàn)LIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,ROTATE_270 im.transpose(Image.ROTATE_90) # 用給定的尺寸生成一張新的圖像,與原圖有相同的模式 im.transform((200, 200), Image.EXTENT, (0, 0, 300, 300))
十六、高級(jí)圖片處理
- 使用
ImageEnhance
對(duì)象就能快速地進(jìn)行設(shè)置。 可以調(diào)整對(duì)比度、亮度、色平衡和銳利度
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) # 邊緣檢測(cè) im3 = im.filter(ImageFilter.FIND_EDGES) im.show() im1.show() im2.show() im3.show()
十八、設(shè)置透明度合成兩張圖
- 使用給定的兩張圖像及透明度變量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()
十九、設(shè)置模式合成兩張圖
- 使用給定的兩張圖像及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()
二十、草稿模式
- 速度要求比質(zhì)量高的場(chǎng)合
- 允許在不讀取文件內(nèi)容的情況下盡可能(可能不會(huì)完全等于給定的參數(shù))地將圖片轉(zhuǎn)成給定模式和大小,這在生成縮略圖的時(shí)候非常有效
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()
二十一、獲取通道名稱(chēng)
- 返回包括每個(gè)通道名稱(chēng)的元組
- 例如,對(duì)于RGB圖像將返回(“R”,“G”,“B”)
from PIL import Image im = Image.open("picture.jpg") print(im.getbands())
二十二、獲取包圍盒
- 計(jì)算圖像非零區(qū)域的包圍盒
- 這個(gè)包圍盒是一個(gè)4元組,定義了左、上、右和下像素坐標(biāo)
- 如果圖像是空的,這個(gè)方法將返回空
from PIL import Image im = Image.open("picture.jpg") print(im.getbbox())
二十三、獲取像素值
from PIL import Image im = Image.open("picture.jpg") print(im.getdata())
二十四、獲取圖片極值
- 返回一個(gè)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])
二十七、內(nèi)存分配
- 為圖像分配內(nèi)存并從文件中加載它
- 返回一個(gè)用于讀取和修改像素的像素訪(fǎng)問(wèn)對(duì)象
from PIL import Image im = Image.open("picture.jpg") pix = im.load() print(pix[0,2])
二十八、查找指定的幀
- 給定的動(dòng)態(tài)圖中查找指定的幀
- 如果查找超越了序列的末尾,則產(chǎn)生一個(gè)EOFError異常
- 當(dāng)文件被打開(kāi)時(shí),PIL庫(kù)自動(dòng)指定到第0幀上
from PIL import Image im_gif = Image.open("loading.gif") print(im_gif.mode) # 默認(rèn)打開(kāi)時(shí)是第0幀 im_gif.show() im_gif.seek(1) im_gif.show() im_gif.seek(3) im_gif.show()
二十九、獲取當(dāng)前幀位置
from PIL import Image im_gif = Image.open("loading.gif") print(im_gif.tell()) im_gif.seek(3) print(im_gif.tell())
到此這篇關(guān)于python 包之 Pillow 圖像處理教程分享的文章就介紹到這了,更多相關(guān)python Pillow 圖像處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python多進(jìn)程中的生產(chǎn)者和消費(fèi)者模型詳解
這篇文章主要介紹了python多進(jìn)程中的生產(chǎn)者和消費(fèi)者模型,生產(chǎn)者是指生產(chǎn)數(shù)據(jù)的任務(wù),消費(fèi)者是指消費(fèi)數(shù)據(jù)的任務(wù)。當(dāng)生產(chǎn)者的生產(chǎn)能力遠(yuǎn)大于消費(fèi)者的消費(fèi)能力,生產(chǎn)者就需要等消費(fèi)者消費(fèi)完才能繼續(xù)生產(chǎn)新的數(shù)據(jù)2023-03-03Python實(shí)現(xiàn)括號(hào)匹配方法詳解
這篇文章主要介紹了python實(shí)現(xiàn)括號(hào)匹配方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02python生成多個(gè)只含0,1元素的隨機(jī)數(shù)組或列表的實(shí)例
今天小編就為大家分享一篇python生成多個(gè)只含0,1元素的隨機(jī)數(shù)組或列表的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Ubuntu22.04安裝PyTorch1.12.1 GPU版本全過(guò)程
這篇文章主要介紹了Ubuntu22.04安裝PyTorch1.12.1 GPU版本全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Flask框架學(xué)習(xí)筆記之消息提示與異常處理操作詳解
這篇文章主要介紹了Flask框架學(xué)習(xí)筆記之消息提示與異常處理操作,結(jié)合實(shí)例形式分析了flask框架表單登陸消息提示、錯(cuò)誤模板調(diào)用及異常處理相關(guān)操作技巧,需要的朋友可以參考下2019-08-08python使用win32com庫(kù)播放mp3文件的方法
這篇文章主要介紹了python使用win32com庫(kù)播放mp3文件的方法,涉及Python使用win32com庫(kù)操作音頻文件的相關(guān)技巧,需要的朋友可以參考下2015-05-05Python+NumPy繪制常見(jiàn)曲線(xiàn)的方法詳解
NumPy(Numerical Python)是Python的一種開(kāi)源的數(shù)值計(jì)算擴(kuò)展。本文將利用NumPy庫(kù)繪制利薩茹曲線(xiàn)、計(jì)算斐波那契數(shù)列、方波和鋸齒波和三角波,需要的可以參考一下2022-06-06pip已經(jīng)安裝好第三方庫(kù)但pycharm中import時(shí)還是標(biāo)紅的解決方案
這篇文章主要介紹了python中pip已經(jīng)安裝好第三方庫(kù)但pycharm中import時(shí)還是標(biāo)紅的問(wèn)題,本文給大家分享解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10