Python Imaging Library (PIL) 全面指南:PIL高級圖像處理-分割與顏色空間轉換

高級圖像處理:PIL中的圖像分割與顏色空間轉換

學習目標

本課程將深入探討PIL(Python Imaging Library)中的一些高級功能,包括圖像分割和顏色空間轉換。通過本課程的學習,學員將能夠掌握如何使用PIL進行更復雜的圖像處理任務,如將圖像分割成多個部分,以及如何在不同的顏色空間之間轉換圖像。

相關知識點

  • PIL中的圖像分割與顏色空間轉換

學習內容

1 PIL中的圖像分割與顏色空間轉換

1.1 圖像分割

圖像分割是圖像處理中的一個重要步驟,它涉及將圖像劃分為多個部分或區域,每個部分或區域具有相似的屬性。在PIL中,可以通過多種方式實現圖像分割,包括基于顏色、紋理或形狀的分割。本課程將重點介紹如何使用PIL進行基于顏色的圖像分割。

1.1.2 理論知識

圖像分割在許多應用中都非常重要,例如醫學圖像分析、自動駕駛汽車的環境感知、以及數字內容創作等。在基于顏色的圖像分割中,我們通常會根據顏色的相似性來劃分圖像。PIL提供了多種方法來處理圖像的顏色信息,包括獲取圖像的像素值、創建顏色掩碼等。

在PIL中,圖像的顏色信息通常以RGB(紅、綠、藍)格式存儲。每個像素點由三個值組成,分別代表紅、綠、藍三種顏色的強度。通過分析這些值,我們可以確定哪些像素屬于同一顏色區域,從而實現圖像分割。

1.1.3 實踐操作

下面的代碼示例展示了如何使用PIL根據顏色閾值對圖像進行分割。我們將創建一個顏色掩碼,該掩碼將圖像中所有紅色像素標記為白色,其他像素標記為黑色。

%pip install pillow==11.0.0
!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/f4b385322ef711f0aeedfa163edcddae/example.zip
!unzip example.zip
from PIL import Imagedef color_segmentation(image_path, output_path, color_threshold):# 打開圖像image = Image.open(image_path)# 轉換為RGB模式image = image.convert("RGB")# 獲取圖像尺寸width, height = image.size# 創建一個新的空白圖像,用于存儲分割結果segmented_image = Image.new("RGB", (width, height), "black")# 遍歷每個像素for x in range(width):for y in range(height):# 獲取當前像素的顏色值r, g, b = image.getpixel((x, y))# 檢查是否滿足顏色閾值if r > color_threshold and g < color_threshold and b < color_threshold:# 如果滿足條件,將該像素標記為白色segmented_image.putpixel((x, y), (255, 255, 255))# 保存分割后的圖像segmented_image.save(output_path)# 使用示例
color_segmentation("input_image.jpg", "output_image.jpg", 200)# 打開一個圖像文件
img = Image.open('output_image.jpg')# 顯示圖像
img.show()

在這里插入圖片描述
在這個實驗中,首先打開并轉換圖像為RGB模式,然后創建一個新的空白圖像用于存儲分割結果。接著,我們遍歷圖像的每個像素,檢查其紅色分量是否大于給定的閾值,同時綠色和藍色分量是否小于閾值。如果滿足條件,我們將該像素標記為白色,否則保持黑色。最后,我們將分割后的圖像保存到指定路徑。

1.2 顏色空間轉換

顏色空間轉換是指將圖像從一個顏色空間轉換到另一個顏色空間的過程。常見的顏色空間包括RGB、HSV(色調、飽和度、亮度)和CMYK(青色、洋紅色、黃色、黑色)。不同的顏色空間適用于不同的應用場景。例如,HSV顏色空間在處理顏色和亮度分離的任務中非常有用,而CMYK顏色空間則常用于打印和出版。

1.2.1 理論知識

在PIL中,可以使用convert方法輕松地在不同的顏色空間之間轉換圖像。例如,將RGB圖像轉換為HSV圖像,可以使用image.convert("HSV")。轉換后的圖像將包含三個通道,分別代表色調、飽和度和亮度。

顏色空間轉換在圖像處理中有很多應用。例如,通過將圖像從RGB轉換為HSV,我們可以更容易地調整圖像的亮度或飽和度,而不會影響顏色。此外,某些顏色處理算法在特定的顏色空間中表現更好,因此顏色空間轉換是實現這些算法的必要步驟。

1.2.2 實踐操作

下面的代碼示例展示了如何使用PIL將RGB圖像轉換為HSV圖像,并調整其亮度。

from PIL import Imagedef adjust_brightness(image_path, output_path, brightness_factor):# 打開圖像image = Image.open(image_path)# 轉換為HSV顏色空間hsv_image = image.convert("HSV")# 獲取圖像尺寸width, height = hsv_image.size# 創建一個新的空白圖像,用于存儲調整后的結果adjusted_image = Image.new("HSV", (width, height))# 遍歷每個像素for x in range(width):for y in range(height):# 獲取當前像素的顏色值h, s, v = hsv_image.getpixel((x, y))# 調整亮度v = int(v * brightness_factor)# 確保亮度值在0-255之間v = max(0, min(255, v))# 將調整后的像素值放入新圖像adjusted_image.putpixel((x, y), (h, s, v))# 將調整后的圖像轉換回RGB顏色空間adjusted_image = adjusted_image.convert("RGB")# 保存調整后的圖像adjusted_image.save(output_path)# 使用示例
adjust_brightness("input_image.jpg", "output_image.jpg", 1.5)# 打開一個圖像文件
img = Image.open('output_image.jpg')# 顯示圖像
img.show()

在這里插入圖片描述
在這個示例中,我們首先打開圖像并將其轉換為HSV顏色空間。然后,我們創建一個新的空白圖像用于存儲調整后的結果。接著,我們遍歷圖像的每個像素,獲取其HSV值,并根據給定的亮度因子調整亮度值。調整后的像素值被放入新圖像中。最后,我們將調整后的圖像轉換回RGB顏色空間并保存。

1.3 圖像合成

圖像合成是指將多個圖像組合成一個新圖像的過程。在PIL中,可以通過多種方式實現圖像合成,包括簡單的疊加、透明度混合以及使用蒙版等。本課程將介紹如何使用PIL進行圖像的透明度混合。

1.3.1 理論知識

圖像合成在許多領域都有廣泛的應用,例如數字藝術創作、視覺效果制作、以及圖像編輯等。在PIL中,可以使用Image.blend方法將兩個圖像進行透明度混合。該方法接受兩個圖像和一個混合因子作為參數,返回一個新的圖像,其中每個像素值是兩個輸入圖像對應像素值的線性組合。

透明度混合的基本公式為:
result=α×image1+(1?α)×image2\text{result} = \alpha \times \text{image1} + (1 - \alpha) \times \text{image2}result=α×image1+(1?α)×image2
其中,α\alphaα 是混合因子,取值范圍為0到1。當 α\alphaα 為0時,結果圖像完全由image2組成;當 α\alphaα 為1時,結果圖像完全由image1組成。

1.3.2 實踐操作

下面的代碼示例展示了如何使用PIL將兩個圖像進行透明度混合。

from PIL import Imagedef blend_images(image1_path, image2_path, output_path, alpha):# 打開圖像image1 = Image.open(image1_path)image2 = Image.open(image2_path)# 確保兩個圖像尺寸相同if image1.size != image2.size:raise ValueError("兩個圖像的尺寸必須相同")# 進行透明度混合blended_image = Image.blend(image1, image2, alpha)# 保存混合后的圖像blended_image.save(output_path)# 使用示例
blend_images("image1.jpg", "image2.jpg", "blended_image.jpg", 0.5)# 打開一個圖像文件
img = Image.open('blended_image.jpg')# 顯示圖像
img.show()

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94971.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94971.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94971.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖解 OAuth,為什么這樣設計?

OAuth 于 2007 年首次推出。它最初由 Twitter 創建&#xff0c;因為 Twitter 希望能夠允許第三方應用代表用戶發布推文。想象一下&#xff0c;如果今天設計類似的應用&#xff0c;你會怎么做&#xff1f;一種方法是直接要求用戶輸入用戶名和密碼。因此&#xff0c;你創建一個非…

WeakAuras Lua Script ICC (BarneyICC) Simplified Chinese [Mini]

WeakAuras Lua Script ICC &#xff08;BarneyICC&#xff09; Simplified Chinese [Mini] ICC 迷你版本會打了只需要團隊框體高亮提示即可&#xff0c;因為有DBM&#xff0c;就不需要那么多了 !WA:2!S3xc4XrXzI6wkSjzcVSyb4aoKWGaC04ijMdPrsoit0OdRXwxmsYgmWoNTup4rZ0UNr2sKL…

mcp學習

mcp學習 預算&#xff1a;5塊(半頓拼好飯嗚嗚嗚) 出問題試著開啟或者關閉代理。 文章目錄mcp學習1. 基本原理2. 環境配置1. cherryStudiodeepseekpython2. Clinedeepseek3. 常用mcp服務1. mcp-server-fetch2. mcp-playwright3. baidu-map4. filesystem5. mcp-mysql-server參考…

Rust:所有權

Rust&#xff1a;所有權拷貝 & 移動堆棧拷貝移動克隆所有權變量的初始權限指針的雙重權限權限的動態變化引用賦值重新借用函數調用時的權限移動拷貝借用不可變借用可變借用復合類型的權限結構體元組數組傳統語言的內存管理要么依賴程序員手動管理&#xff08;C/C&#xff0…

Elasticsearch數據遷移快照方案初探(二):快照創建與多節點存儲問題解決

快照倉庫創建成功 經過前面的配置修改&#xff0c;我們成功創建了快照倉庫&#xff1a; curl -X PUT "https://[ES_HOST]:9200/_snapshot/backup_repo" \-H "Content-Type: application/json" \-u "[USERNAME]:[PASSWORD]" \-k \-d {"type&…

DeepSeek大模型風靡云平臺,百度智能云、阿里云、騰訊云等多個平臺宣布上線DeepSeek模型

近日&#xff0c;百度智能云、華為云、阿里云、騰訊云、360數字安全、云軸科技等多個平臺紛紛宣布上線DeepSeek大模型&#xff0c;這一消息無疑為AI開發者和企業用戶帶來了全新的機遇和選擇。本文將探討DeepSeek大模型上線的背景、意義以及未來的發展趨勢。 首先&#xff0c;我…

position屬性

文章目錄Position屬性&#x1f9ed; 一、position 屬性的取值&#x1f4dd; 二、各屬性值詳解與示例1. static&#xff08;靜態定位&#xff09;2. relative&#xff08;相對定位&#xff09;3. absolute&#xff08;絕對定位&#xff09;4. fixed&#xff08;固定定位&#xf…

通信中間件 Fast DDS(二) :詳細介紹

目錄 1.引言 2.DDS的基本原理 3.FastDDS 的核心特性 4.FastDDS 的核心架構 5.典型應用場景 6.FastDDS 的安裝與快速上手 7.學習資源與社區 1.引言 FastDDS&#xff08;原稱 Fast RTPS&#xff09;是由西班牙公司 eProsima 開發的一款開源、高性能、實時性強的數據分發服…

【69頁PPT】智慧方案智慧校園解決方案(附下載方式)

篇幅所限&#xff0c;本文只提供部分資料內容&#xff0c;完整資料請看下面鏈接 https://download.csdn.net/download/2501_92808811/91776074 資料解讀&#xff1a;【69頁PPT】智慧方案智慧校園解決方案 詳細資料請看本解讀文章的最后內容 智慧校園的概念與背景 智慧校園是…

FPGA的工作原理

FPGA&#xff08;現場可編程門陣列&#xff09;的核心工作原理是通過可配置的硬件架構&#xff0c;讓用戶在芯片出廠后自主定義電路邏輯&#xff0c;實現從“通用硬件”到“專用硬件”的靈活轉換&#xff0c;本質是用可編程資源搭建出符合特定需求的數字電路。一、核心架構&…

構建生產級RAG系統:從數據處理到智能體的全流程實踐

構建生產級RAG系統&#xff1a;從數據處理到智能體的全流程實踐 檢索增強生成&#xff08;RAG&#xff09;技術已成為打造高級知識問答系統的核心&#xff0c;但從原型到穩定高效的生產級系統&#xff0c;需突破數據處理、檢索優化、智能決策等多重挑戰。本文以某型號工業設備…

Java-代理

在 Java 開發中&#xff0c;代理模式是一種非常重要的設計模式&#xff0c;它通過引入代理對象來控制對目標對象的訪問&#xff0c;從而實現額外功能的增強。一、代理模式的基本概念代理模式的核心思想是&#xff1a;通過一個代理對象來間接訪問目標對象&#xff0c;在不修改目…

【基礎知識】互斥鎖、讀寫鎖、自旋鎖的區別

從定義、工作原理、適用場景和性能開銷四個維度來剖析這三種鎖的區別 核心結論 這三種鎖的核心區別在于它們應對“鎖已被占用”情況時的行為策略不同,而這直接決定了它們的性能和適用場景。 鎖類型 核心策略 適用場景 互斥鎖 (Mutex) 等不到,就睡 通用的獨占訪問,臨界區執行…

智慧清潔革新者:有鹿機器人自述

晨曦微露&#xff0c;當城市還未完全蘇醒&#xff0c;我已悄然完成數萬平方米的清潔工作。作為有鹿智能巡掃機器人&#xff0c;我很榮幸能與您分享如何以科技之力重塑清潔行業的標準與體驗。卓越技術&#xff1a;重新定義清潔新標準我搭載的聰明大腦是基于Master2000通用具身智…

python學習打卡day48

知識點回顧&#xff1a; 隨機張量的生成&#xff1a;torch.randn函數卷積和池化的計算公式&#xff08;可以不掌握&#xff0c;會自動計算的&#xff09;pytorch的廣播機制&#xff1a;加法和乘法的廣播機制 ps&#xff1a;numpy運算也有類似的廣播機制&#xff0c;基本一致 im…

記一次雪花算法 ID 精度丟失的Bug:前端接收到的 Long 被“四舍五入”了?

后端生成的 ID&#xff1a;1961005746230337538 前端收到的 ID&#xff1a;1961005746230337500 —— 少了 38&#xff1f;&#xff01;這不是 Bug&#xff0c;是 JavaScript 的“安全整數”陷阱&#xff01;本文記錄一次真實項目中因 雪花算法 ID 精度丟失 導致的線上問題&…

零知開源——基于STM32F407VET6和ADXL345三軸加速度計的精準運動姿態檢測系統

?零知IDE 是一個真正屬于國人自己的開源軟件平臺&#xff0c;在開發效率上超越了Arduino平臺并且更加容易上手&#xff0c;大大降低了開發難度。零知開源在軟件方面提供了完整的學習教程和豐富示例代碼&#xff0c;讓不懂程序的工程師也能非常輕而易舉的搭建電路來創作產品&am…

Android14 init.qcom.usb.rc詳解

本文以高通平臺為例&#xff0c;介紹其USB子系統啟動以及USB各種配置動態切換的邏輯&#xff0c;它是以configfs架構實現動態配置USB。 相關文檔 1. USB子系統的啟動 1.1 on boot階段 1.1.1 重啟恢復用戶選擇的USB配置 當設備重啟時恢復用戶選擇的USB配置&#xff0c;避免每…

Docker的常用命令及簡單使用

1、docker的常用命令 1.1、幫助命令 docker version # 顯示docker的版本信息 docker info # 顯示docker的系統信息&#xff0c;包括鏡像和容器的數量 docker 指令 --help # 查看某個指令的幫助命令可以通過docker --help查看docker常用命…

HGDB全文檢索/中文分詞的使用

文章目錄文檔用途詳細信息文檔用途 本文用于HGDB全文檢索/中文分詞的介紹&#xff0c;其介紹內容在附件&#xff0c;使用案例見正文 詳細信息 一、創建擴展 highgo# create extension zhparser;CREATE EXTENSION highgo# \dFp List of text search parsers Schema…