Python 圖像處理之PIL庫(kù)詳解用法
前言
提示:以下是本篇文章正文內(nèi)容
🍒PIL庫(kù)概述
PIL庫(kù)支持圖像存儲(chǔ)、 顯示和處理, 它能夠處理幾乎所有圖片格式, 可以完成
對(duì)圖像的縮放、 剪裁、 疊加以及向圖像添加線(xiàn)條、 圖像和文字等操作
PIL庫(kù)可以完成圖像歸檔和圖像處理兩方面功能需求:
(1)圖像歸檔:對(duì)圖像進(jìn)行批處理、 生成圖像預(yù)覽、 圖像格式轉(zhuǎn)換等
(2)圖像處理:圖像基本處理、 像素處理、 顏色處理等
🍓Image類(lèi)解析
💚圖像的創(chuàng)建
在PIL中, 任何一個(gè)圖像文件都可以用Image對(duì)象表示Image類(lèi)的圖像讀取和創(chuàng)建方法
方法 | 描述 |
---|---|
Image.open(filename) | 根據(jù)參數(shù)加載圖像文件 |
Image.new(mode, size, color) | 根據(jù)給定參數(shù)創(chuàng)建一個(gè)新的圖像 |
Image.open(StringIO.StringIO(buffer)) | 從字符串中獲取圖像 |
Image.frombytes(mode, size, data) | 根據(jù)像素點(diǎn)data創(chuàng)建圖像 |
Image.verify() | 對(duì)圖像文件完整性進(jìn)行檢查, 返回異常 |
from PIL import Image im = Image.open(r"E:\Pycharm\Project\pictures\2049675.jpg") im.show() // 顯示
基本上如下圖
💙圖像的屬性
屬性 | 描述 |
---|---|
Image.format | 標(biāo)識(shí)圖像格式或來(lái)源, 如果圖像不是從文件讀取, 值是None |
Image.mode | 圖像的色彩模式, "L"灰度圖像、 "RGB"真彩色圖像、 "CMYK"出版圖像 |
Image.format | 標(biāo)識(shí)圖像格式或來(lái)源, 如果圖像不是從文件讀取, 值是None |
Image.size | 圖像寬度和高度, 單位是像素(px) , 返回值是二元元組(tuple) |
Image.palette | 調(diào)色板屬性, 返回一個(gè)ImagePalette類(lèi)型 |
from PIL import Image im = Image.open(r"E:\Pycharm\Project\pictures\2049675.jpg") im.show() print(im.format,im.size)
# 結(jié)果
# JPEG (1920, 1080)
💜圖像的轉(zhuǎn)換
方法 | 描述 |
---|---|
Image.save(filename, format) | 將圖像保存為filename文件名, format是圖片格式 |
Image.convert(mode) | 使用不同的參數(shù), 轉(zhuǎn)換圖像為新的模式 |
Image.thumbnail(size) | 創(chuàng)建圖像的縮略圖, size是縮略圖尺寸的二元元組 |
jpg 轉(zhuǎn)換成png
from PIL import Image im = Image.open(r"E:\Pycharm\Project\pictures\2049675.jpg") print(im) im.save(r"E:\Pycharm\Project\pictures\2049675changed.png") im = Image.open(r"E:\Pycharm\Project\pictures\2049675changed.png") print(im) im.show()
# 結(jié)果
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1920x1080 at 0x1A8DE865F40>
<PIL.PngImagePlugin.PngImageFile image mode=RGB size=1920x1080 at 0x1A8DE8D2E80>
GIF文件圖像提取。
對(duì)一個(gè)GIF格式動(dòng)態(tài)文件, 提取其中各幀圖像, 并保存為文件
from PIL import Image im = Image.open(r"E:\Pycharm\Project\pictures\21.gif") # 讀入一個(gè)GIF文件 try: im.save('picframe{:02d}.png'.format(im.tell())) while True: im.seek(im.tell()+1) # 幀的位置 im.save('picframe{:02d}.png'.format(im.tell())) except: print("處理結(jié)束")
結(jié)果
tell()方法:返回當(dāng)前幀所處位置,從0開(kāi)始計(jì)算
縮略圖
from PIL import Image im = Image.open(r"E:\Pycharm\Project\pictures\2050074.jpg") print(im) im.thumbnail((128, 99)) im.save("mm","JPEG") print(im) im.show()
# 結(jié)果
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=2757x2135 at 0x238DFCD5DC0>
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=128x99 at 0x238DFCD5DC0>
💗圖像處理
1.Image類(lèi)可以縮放和旋轉(zhuǎn)圖像, 其中, rotate()方法以逆時(shí)針旋轉(zhuǎn)的角度值作
為參數(shù)來(lái)旋轉(zhuǎn)圖像。
方法 | 描述 |
---|---|
Image.resize(size) | 按size大小調(diào)整圖像, 生成副本 |
Image.rotate(angle) | 按angle角度旋轉(zhuǎn)圖像, 生成副本 |
2.Image類(lèi)能夠?qū)γ總€(gè)像素點(diǎn)或者一幅RGB圖像的每個(gè)通道單獨(dú)進(jìn)行操作,split()
方法能夠?qū)GB圖像各顏色通道提取出來(lái), merge()方法能夠?qū)⒏鳘?dú)立通道再合成一幅新的圖像。
方法 | 描述 |
---|---|
Image.point(func) | 根據(jù)函數(shù)func功能對(duì)每個(gè)元素進(jìn)行運(yùn)算, 返回圖像副本 |
Image.split() | 提取RGB圖像的每個(gè)顏色通道, 返回圖像副本 |
Image.merge(mode, bands) | 合并通道 , 采用mode色彩, bands是新色的色彩通道 |
Image.blend(im1,im2,alpha) | 將兩幅圖片im1和im2按照如下公式插值后生成新的圖像:im1 * (1.0-alpha) + im2 * alpha |
圖像的顏色交換
交換圖像中的顏色, 可以通過(guò)分離RGB圖片的三個(gè)顏色通道實(shí)現(xiàn)顏色交換
from PIL import Image im = Image.open(r"E:\Pycharm\Project\pictures\2050536.jpg") #打開(kāi)文件 r, g, b = im.split() #獲得RGB通道數(shù)據(jù) newg = g.point(lambda i: i * 0.9) # 將G通道顏色值變?yōu)樵瓉?lái)的0.9倍 newb = b.point(lambda i: i < 100) # 選擇B通道值低于100的像素點(diǎn) om = Image.merge(im.mode, (r, newg, newb)) # 將3個(gè)通道合形成新圖像 om.save(r"E:\Pycharm\Project\pictures\aa.jpg") #輸出圖片 om.show()
原圖:
交換后
3.圖像的過(guò)濾和增強(qiáng)
PIL庫(kù)的ImageFilter類(lèi)和ImageEnhance類(lèi)提供了過(guò)濾圖像和增強(qiáng)圖像的方法, 共10種
方法表示 | 描述 |
---|---|
ImageFilter.BLUR | 圖像的模糊效果 |
ImageFilter.CONTOUR | 圖像的輪廓效果 |
ImageFilter.DETAIL | 圖像的細(xì)節(jié)效果 |
ImageFilter.EDGE_ENHANCE | 圖像的邊界加強(qiáng)效果 |
ImageFilter.EDGE_ENHANCE_MORE | 圖像的閾值邊界加強(qiáng)效果 |
ImageFilter.EMBOSS | 圖像的浮雕效果 |
ImageFilter.FIND_EDGES | 圖像的邊界效果 |
ImageFilter.SMOOTH | 圖像的平滑效果 |
ImageFilter.SMOOTH_MORE | 圖像的閾值平滑效果 |
ImageFilter.SHARPEN | 圖像的銳化效果 |
輪廓效果
from PIL import Image from PIL import ImageFilter im = Image.open(r"E:\Pycharm\Project\pictures\2050558.jpg") om = im.filter(ImageFilter.CONTOUR) om.save('abc.jpg') om.show()
原圖:
修改后:
4.ImageEnhance類(lèi)提供了更高級(jí)的圖像增強(qiáng)需求, 它提供調(diào)整色彩度、 亮度、 對(duì)比度、 銳化等功能
方法 | 描述 |
---|---|
ImageEnhance.enhance(factor) | 對(duì)選擇屬性的數(shù)值增強(qiáng)factor倍 |
ImageEnhance.Color(im) | 調(diào)整圖像的顏色平衡 |
ImageEnhance.Contrast(im) | 調(diào)整圖像的對(duì)比度 |
ImageEnhance.Brightness(im) | 調(diào)整圖像的亮度 |
ImageEnhance.Sharpness(im) | 調(diào)整圖像的銳度 |
總結(jié)
提示:這里對(duì)文章進(jìn)行總結(jié):
到此這篇關(guān)于Python 圖像處理之PIL庫(kù)詳解用法的文章就介紹到這了,更多相關(guān)Python 圖像處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python大數(shù)據(jù)量文本文件高效解析方案代碼實(shí)現(xiàn)全過(guò)程
在數(shù)據(jù)分析中,有時(shí)數(shù)據(jù)源會(huì)是超大的文本文件(幾G,或在幾十G),需要從中提取需要的信息,下面這篇文章主要給大家介紹了關(guān)于Python大數(shù)據(jù)量文本文件高效解析方案代碼實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-12-12Python?OpenCV超詳細(xì)講解圖像堆疊的實(shí)現(xiàn)
OpenCV用C++語(yǔ)言編寫(xiě),它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要傾向于實(shí)時(shí)視覺(jué)應(yīng)用,并在可用時(shí)利用MMX和SSE指令,本篇文章帶你通過(guò)OpenCV實(shí)現(xiàn)圖像堆疊2022-04-04Python實(shí)現(xiàn)簡(jiǎn)單石頭剪刀布游戲
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)單的石頭剪刀布的游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01Python自動(dòng)操作神器PyAutoGUI的使用教程
這篇文章主要是想和大家來(lái)聊一聊Python如何利用自動(dòng)操作 GUI 神器——PyAutoGUI在桌面實(shí)現(xiàn)自動(dòng)化操作,感興趣的小伙伴可以了解一下2022-06-06python 從遠(yuǎn)程服務(wù)器下載日志文件的程序
本文提供了一種方法,該程序可實(shí)現(xiàn)抓取服務(wù)器的日志文件到本地,根據(jù)該程序可自行擴(kuò)展對(duì)日志文件的自動(dòng)化分析。常用于數(shù)據(jù)挖掘、生產(chǎn)維護(hù)等2013-02-02