最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 圖像處理Pillow安裝、使用實(shí)戰(zhàn)應(yīng)用小結(jié)

 更新時(shí)間:2025年11月10日 10:30:36   作者:蕭鼎  
Pillow是Python中功能強(qiáng)大的圖像處理庫(kù),支持多種圖像格式和操作,本文介紹了Pillow的安裝、基礎(chǔ)操作、像素級(jí)操作、圖像增強(qiáng)、繪圖與文字處理、圖像通道與混合、圖像格式與批處理、高級(jí)技巧與性能優(yōu)化,以及Pillow在AI圖像預(yù)處理中的應(yīng)用,感興趣的朋友跟隨小編一起看看吧

一、前言:為什么選擇 Pillow?

在 Python 的圖像處理世界里,Pillow 是最經(jīng)典、最實(shí)用、也是最常用的基礎(chǔ)庫(kù)之一。
它是 Python Imaging Library (PIL) 的一個(gè)分支,經(jīng)過(guò)多年更新與維護(hù),如今已經(jīng)成為 Python 圖像處理的事實(shí)標(biāo)準(zhǔn)。

Pillow 能夠完成從基礎(chǔ)到高級(jí)的幾乎所有圖像任務(wù):

  • 打開(kāi)、顯示、保存各種圖像格式(JPEG、PNG、BMP、TIFF 等)
  • 進(jìn)行圖像的縮放、裁剪、旋轉(zhuǎn)、翻轉(zhuǎn)、濾鏡和增強(qiáng)
  • 添加文字、水印、幾何圖形
  • 批量圖像處理
  • 與 NumPy、OpenCV、TensorFlow 等配合做 AI 圖像預(yù)處理

本文將系統(tǒng)介紹 Pillow 的功能、核心模塊、使用技巧與進(jìn)階實(shí)踐。
無(wú)論你是初學(xué)者,還是圖像算法工程師,都能從中獲得啟發(fā)。

二、安裝與快速上手

1. 安裝 Pillow

在大多數(shù) Python 環(huán)境中,Pillow 可以直接通過(guò) pip 安裝:

pip install pillow

驗(yàn)證是否安裝成功:

from PIL import Image
print(Image.__version__)

如果能正常輸出版本號(hào),例如 10.2.0,說(shuō)明 Pillow 已正確安裝。

2. 快速體驗(yàn)

我們從一個(gè)最簡(jiǎn)單的例子開(kāi)始,打開(kāi)并顯示一張圖片:

from PIL import Image
# 打開(kāi)圖像
img = Image.open("example.jpg")
# 顯示圖像
img.show()
# 保存為另一種格式
img.save("example_converted.png")

是不是很簡(jiǎn)單?
僅幾行代碼,你就能完成打開(kāi)、顯示、格式轉(zhuǎn)換等操作。

三、圖像的基礎(chǔ)操作

1. 圖像的屬性

Pillow 的 Image 對(duì)象包含了大量信息:

img = Image.open("example.jpg")
print(img.format)   # 圖像格式,如 JPEG
print(img.size)     # (寬, 高)
print(img.mode)     # 模式,如 RGB、RGBA、L、CMYK

常見(jiàn)模式說(shuō)明:

模式含義通道數(shù)
1黑白(二值)1
L灰度圖像1
RGB彩色圖像3
RGBA含透明度通道的彩色圖像4
CMYK印刷常用顏色空間4

2. 圖像的裁剪與縮放

(1)裁剪

box = (100, 100, 400, 400)
region = img.crop(box)
region.show()

box 表示左上角和右下角的坐標(biāo) (left, upper, right, lower)。

(2)縮放

resized = img.resize((200, 200))
resized.show()

可以選擇不同的插值算法:

from PIL import Image

img.resize((200, 200), Image.Resampling.LANCZOS)

3. 旋轉(zhuǎn)與翻轉(zhuǎn)

# 順時(shí)針旋轉(zhuǎn)45度
rotated = img.rotate(45)
# 水平翻轉(zhuǎn)
flipped = img.transpose(Image.FLIP_LEFT_RIGHT)
# 垂直翻轉(zhuǎn)
flipped_v = img.transpose(Image.FLIP_TOP_BOTTOM)

4. 顏色模式轉(zhuǎn)換

gray = img.convert("L")   # 轉(zhuǎn)灰度
rgba = img.convert("RGBA")

常用于人臉檢測(cè)、OCR 前的預(yù)處理。

四、像素級(jí)操作

Pillow 允許直接訪問(wèn)像素進(jìn)行操作。

1. getpixel() 與 putpixel()

r, g, b = img.getpixel((10, 10))
print(r, g, b)
img.putpixel((10, 10), (255, 0, 0))

可用于修改單個(gè)像素、繪制特定形狀。

2. 使用 NumPy 操作像素

與 NumPy 結(jié)合可以極大提高效率:

import numpy as np
from PIL import Image
img = Image.open("example.jpg")
arr = np.array(img)
# 反轉(zhuǎn)顏色
arr = 255 - arr
Image.fromarray(arr).show()

NumPy 讓 Pillow 具備了更高的靈活性,常用于 AI 模型前的圖像預(yù)處理。

五、圖像增強(qiáng)與濾鏡

Pillow 提供了多個(gè)增強(qiáng)模塊,可提升圖像質(zhì)量或增加特效。

1. 圖像增強(qiáng)模塊

from PIL import ImageEnhance
enhancer = ImageEnhance.Brightness(img)
bright = enhancer.enhance(1.5)  # 提亮 50%
bright.show()

常見(jiàn)增強(qiáng)類(lèi)型:

模塊功能
ImageEnhance.Brightness亮度
ImageEnhance.Contrast對(duì)比度
ImageEnhance.Color飽和度
ImageEnhance.Sharpness銳度

例如:

ImageEnhance.Contrast(img).enhance(2.0).show()

2. 圖像濾鏡

Pillow 提供了豐富的濾鏡功能:

from PIL import ImageFilter
# 模糊
blurred = img.filter(ImageFilter.BLUR)
# 邊緣增強(qiáng)
edge = img.filter(ImageFilter.EDGE_ENHANCE)
# 輪廓
contour = img.filter(ImageFilter.CONTOUR)

其他常用濾鏡包括:

  • ImageFilter.SHARPEN:銳化
  • ImageFilter.EMBOSS:浮雕
  • ImageFilter.FIND_EDGES:邊緣檢測(cè)
  • ImageFilter.SMOOTH:平滑

六、繪圖與文字處理

Pillow 自帶 ImageDraw 模塊,可以在圖片上繪制文字與幾何圖形。

1. 繪制幾何圖形

from PIL import ImageDraw
draw = ImageDraw.Draw(img)
draw.rectangle((50, 50, 200, 200), outline="red", width=3)
draw.ellipse((100, 100, 180, 180), fill="blue")
draw.line((0, 0, 300, 300), fill="green", width=2)

2. 繪制文字

from PIL import ImageFont, ImageDraw
font = ImageFont.truetype("arial.ttf", 36)
draw = ImageDraw.Draw(img)
draw.text((50, 50), "Hello Pillow!", fill="yellow", font=font)
img.show()

可以用于生成水印、驗(yàn)證碼、封面圖等。

七、圖像通道與混合

1. 通道拆分與合并

r, g, b = img.split()
merged = Image.merge("RGB", (r, g, b))

可以單獨(dú)調(diào)整某個(gè)通道的亮度或?qū)Ρ榷取?/p>

2. 圖像混合與透明度控制

from PIL import Image
img1 = Image.open("a.jpg")
img2 = Image.open("b.jpg").resize(img1.size)
blended = Image.blend(img1, img2, alpha=0.5)
blended.show()

八、圖像格式與批處理

1. 圖像格式轉(zhuǎn)換

Pillow 支持大量格式(JPEG、PNG、BMP、TIFF、ICO、WEBP 等):

img.save("output.webp", "WEBP", quality=90)

2. 批量處理示例

下面的腳本能自動(dòng)遍歷文件夾中的所有圖片并壓縮尺寸:

import os
from PIL import Image
def batch_resize(input_dir, output_dir, size=(512, 512)):
    os.makedirs(output_dir, exist_ok=True)
    for file in os.listdir(input_dir):
        if file.endswith(('.jpg', '.png')):
            path = os.path.join(input_dir, file)
            img = Image.open(path)
            img = img.resize(size)
            img.save(os.path.join(output_dir, file))
    print("? 批量處理完成!")
batch_resize("images", "resized")

九、高級(jí)技巧與性能優(yōu)化

1. 懶加載機(jī)制

Image.open() 實(shí)際上不會(huì)立即讀取所有像素,而是延遲加載,直到需要時(shí)才讀取。

img = Image.open("large.jpg")
print(img.size)  # 不會(huì)立即加載整個(gè)文件

這能有效節(jié)省內(nèi)存。

2. 壓縮與節(jié)省空間

img.save("compressed.jpg", quality=70, optimize=True)
  • quality 控制壓縮率(1–95)
  • optimize 自動(dòng)優(yōu)化存儲(chǔ)結(jié)構(gòu)

3. 緩存優(yōu)化

在批量處理中,可以啟用線程池或使用 Image.thumbnail() 自動(dòng)生成縮略圖:

img.thumbnail((300, 300))

相比 resize(),thumbnail() 會(huì)保持縱橫比,并在原地修改。

十、Pillow + AI 圖像預(yù)處理

在 AI 模型訓(xùn)練前,圖像預(yù)處理是關(guān)鍵環(huán)節(jié)。
Pillow 與 NumPy 結(jié)合,可以輕松完成:

from PIL import Image
import numpy as np
def preprocess_image(path):
    img = Image.open(path).convert("RGB").resize((224, 224))
    arr = np.array(img) / 255.0
    return arr

配合 PyTorch 或 TensorFlow:

import torch
tensor = torch.tensor(preprocess_image("cat.jpg")).permute(2, 0, 1).unsqueeze(0)

十一、Pillow 在項(xiàng)目中的應(yīng)用場(chǎng)景

  1. Web 后端圖像服務(wù):用戶頭像上傳、壓縮、裁剪。
  2. 數(shù)據(jù)增強(qiáng):用于機(jī)器學(xué)習(xí)模型的訓(xùn)練樣本擴(kuò)展。
  3. 圖像內(nèi)容生成:自動(dòng)化生成海報(bào)、證件照、表情包。
  4. OCR 預(yù)處理:文字識(shí)別前的灰度化、二值化。
  5. 視頻幀處理:結(jié)合 OpenCV 對(duì)視頻幀進(jìn)行逐幀處理。

十二、實(shí)戰(zhàn)案例:自動(dòng)生成帶水印的縮略圖

from PIL import Image, ImageDraw, ImageFont
import os
def watermark_and_resize(input_path, output_path, watermark_text="? MySite"):
    img = Image.open(input_path).convert("RGBA")
    img.thumbnail((400, 400))
    watermark = Image.new("RGBA", img.size, (0,0,0,0))
    draw = ImageDraw.Draw(watermark)
    font = ImageFont.truetype("arial.ttf", 20)
    draw.text((10, img.size[1]-30), watermark_text, fill=(255,255,255,128), font=font)
    combined = Image.alpha_composite(img, watermark)
    combined.save(output_path, "PNG")
for file in os.listdir("images"):
    if file.endswith(".jpg"):
        watermark_and_resize(f"images/{file}", f"output/{file}")

結(jié)果:每張圖片都會(huì)自動(dòng)生成一個(gè)帶透明水印的縮略圖。

十三、Pillow 的局限與替代方案

雖然 Pillow 功能強(qiáng)大,但也有一些局限性:

局限替代或補(bǔ)充
無(wú) GPU 加速OpenCV / PyTorch Vision
處理大圖性能不足NumPy + CuPy
高級(jí)圖像分割 / 檢測(cè)需結(jié)合深度學(xué)習(xí)框架

但在輕量任務(wù)、Web 服務(wù)、腳本工具中,Pillow 的性能與穩(wěn)定性仍無(wú)可替代。

十四、總結(jié)與展望

Pillow 是 Python 圖像處理的“瑞士軍刀”,
它的優(yōu)勢(shì)在于:

  • 簡(jiǎn)單易用,API 清晰
  • 支持廣泛的格式與操作
  • 可與 NumPy、OpenCV、AI 框架無(wú)縫結(jié)合
  • 適合腳本、Web、AI 各類(lèi)場(chǎng)景

未來(lái),隨著圖像 AI 的發(fā)展,Pillow 仍將作為圖像預(yù)處理的基礎(chǔ)層存在。
它不會(huì)被取代,而是被融合到更高層次的智能圖像系統(tǒng)中。

? 結(jié)語(yǔ)

無(wú)論你是剛開(kāi)始學(xué)習(xí) Python 圖像處理的學(xué)生,
還是正在開(kāi)發(fā) AI 圖像識(shí)別系統(tǒng)的工程師,
掌握 Pillow 是你進(jìn)入圖像世界的第一步。

到此這篇關(guān)于Python 圖像處理利器:Pillow 深度詳解與實(shí)戰(zhàn)應(yīng)用的文章就介紹到這了,更多相關(guān)Python Pillow圖像處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python根據(jù)路徑導(dǎo)入模塊的方法

    python根據(jù)路徑導(dǎo)入模塊的方法

    這篇文章主要介紹了python根據(jù)路徑導(dǎo)入模塊的方法,分析了傳統(tǒng)方法與改進(jìn)方法,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-09-09
  • python的函數(shù)和方法(上)

    python的函數(shù)和方法(上)

    這篇文章主要為大家詳細(xì)介紹了python的函數(shù)和方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • python 使用turtule繪制遞歸圖形(螺旋、二叉樹(shù)、謝爾賓斯基三角形)

    python 使用turtule繪制遞歸圖形(螺旋、二叉樹(shù)、謝爾賓斯基三角形)

    這篇文章主要介紹了python 使用turtule繪制遞歸圖形(螺旋、二叉樹(shù)、謝爾賓斯基三角形) ,需要的朋友可以參考下
    2019-05-05
  • pycharm遠(yuǎn)程linux開(kāi)發(fā)和調(diào)試代碼的方法

    pycharm遠(yuǎn)程linux開(kāi)發(fā)和調(diào)試代碼的方法

    這篇文章主要介紹了pycharm遠(yuǎn)程linux開(kāi)發(fā)和調(diào)試代碼的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python的去重以及數(shù)據(jù)合并的用法說(shuō)明

    python的去重以及數(shù)據(jù)合并的用法說(shuō)明

    這篇文章主要介紹了python的去重以及數(shù)據(jù)合并的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python獲取文件ssdeep值的方法

    Python獲取文件ssdeep值的方法

    這篇文章主要介紹了Python獲取文件ssdeep值的方法,是一個(gè)比較實(shí)用的技巧,本文詳細(xì)講述了實(shí)現(xiàn)這一功能的具體步驟及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2014-10-10
  • python+pyhyper實(shí)現(xiàn)識(shí)別圖片中的車(chē)牌號(hào)思路詳解

    python+pyhyper實(shí)現(xiàn)識(shí)別圖片中的車(chē)牌號(hào)思路詳解

    最近領(lǐng)導(dǎo)給布置了一個(gè)基于圖片識(shí)別車(chē)牌號(hào)的工具開(kāi)發(fā)任務(wù),然后就去研究實(shí)現(xiàn)邏輯,自己根據(jù)opencv寫(xiě)了一個(gè)小demo,發(fā)現(xiàn)不僅速度慢而且成功率極低。然后,就找到了Hyperlpr開(kāi)源項(xiàng)目,這篇文章主要介紹了python+pyhyper實(shí)現(xiàn)識(shí)別圖片中的車(chē)牌號(hào),需要的朋友可以參考下
    2022-12-12
  • 使用Python腳本輕松實(shí)現(xiàn)文件的批量重命名

    使用Python腳本輕松實(shí)現(xiàn)文件的批量重命名

    在日常工作和學(xué)習(xí)中,我們經(jīng)常會(huì)遇到需要批量重命名文件的情況,無(wú)論是整理照片、文檔還是其他類(lèi)型的文件,手動(dòng)一個(gè)個(gè)修改既費(fèi)時(shí)又容易出錯(cuò),今天,我將分享一個(gè)簡(jiǎn)單而強(qiáng)大的Python腳本,幫助你輕松實(shí)現(xiàn)文件的批量重命名,需要的朋友可以參考下
    2025-11-11
  • python庫(kù)geopandas讀取寫(xiě)入空間數(shù)據(jù)及繪圖實(shí)例探索

    python庫(kù)geopandas讀取寫(xiě)入空間數(shù)據(jù)及繪圖實(shí)例探索

    這篇文章主要為大家介紹了python庫(kù)geopandas讀取寫(xiě)入空間數(shù)據(jù)及繪圖實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2024-02-02
  • Python使用post及get方式提交數(shù)據(jù)的實(shí)例

    Python使用post及get方式提交數(shù)據(jù)的實(shí)例

    今天小編就為大家分享一篇關(guān)于Python使用post及get方式提交數(shù)據(jù)的實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01

最新評(píng)論

罗田县| 嵩明县| 苏尼特左旗| 杂多县| 揭阳市| 麻栗坡县| 泌阳县| 垫江县| 舟曲县| 邵武市| 封开县| 海丰县| 丘北县| 巴中市| 象州县| 林州市| 武宁县| 长寿区| 遂川县| 准格尔旗| 常山县| 禄劝| 乃东县| 许昌市| 和林格尔县| 钦州市| 兴安县| 宜昌市| 阿荣旗| 昭苏县| 安阳县| 历史| 和静县| 武陟县| 靖远县| 新竹县| 筠连县| 杭锦后旗| 富宁县| 三明市| 黎城县|