## python影像處理 要做影像處理,我們使用工具有 **requests**(處理該圖片網址) **pillow(PIL)** (python的影像處理套件) **io** (轉換影像url為其他形式保存) **matplotlib.pyplot** (繪圖) ```python= import requests from PIL import Image, ImageEnhance from io import BytesIO import matplotlib.pyplot as plt url = "https://web.ncku.edu.tw/var/file/0/1000/img/DSC01181ok.jpg" #目標網址 response = requests.get(url) #讀取該網址內容 image=Image.open(BytesIO(response.content)) #image.open為產生一個image物件,有自身屬性 plt.axis('off') # 不顯示座標軸 plt.imshow(image) #plt.imshow 顯示 ``` 執行結果: ![image](https://hackmd.io/_uploads/ByiWNW6m6.png) 為了方便,寫出一個download圖片的函數,把圖片變成一種變數 ```python= def download_image(url): #下載圖片函數 response = requests.get(url) #讀取該網址內容 image = Image.open(BytesIO(response.content)) #IO為把文件轉成圖片 return image ``` ### 將兩張圖合起來 ```python= def concatenate_images(image1, image2): #合併圖片的函數 total_width = image1.width + image2.width #寬度相加 #物件的屬性 max_height = max(image1.height, image2.height) #兩張圖片高度切齊(取最高) #PIL.Image.new(mode,size) #創建一個空的image,規格為兩張圖合併後大小 new_image = Image.new('RGB', (total_width, max_height)) new_image.paste(image1, (0, 0)) new_image.paste(image2, (image1.width, 0)) #圖片的位置也有起始點和終點跟座標系統差不多概念 return new_image ``` ### 色調調整 ```python= color_enhancer = ImageEnhance.Color(image) #創建一個顏色增強對象 enhanced_image = color_enhancer.enhance(2.0) # 增强颜色饱和度 combined_image = concatenate_images(image, enhanced_image) plt.imshow(combined_image) plt.axis('off') # 不顯示座標軸 plt.show() ``` 色調調整後跟原本圖片合併,結果: ![image](https://hackmd.io/_uploads/H1quYW6mp.png) ### 亮度增強 ```python= brightness_enhancer = ImageEnhance.Brightness(image) #創建亮度增強對象 brightened_image = brightness_enhancer.enhance(1.5) # 增加亮度 combined_image = concatenate_images(image, brightened_image) plt.imshow(combined_image) plt.axis('off') # 不顯示座標軸 plt.show() ``` 亮度增強後與原本圖片合併,結果: ![image](https://hackmd.io/_uploads/Bkpgc-pma.png) ### other transformation ```python= gray_image = image.convert("L") #"L"為灰階 combined_image = concatenate_images(image, gray_image) plt.imshow(combined_image) plt.axis('off') # 不顯示座標軸 plt.show() ``` #其他轉換模式:https://blog.csdn.net/icamera0/article/details/50843172 圖片灰化後與原本圖片合併,結果: ![image](https://hackmd.io/_uploads/Sk2ZTWaQp.png) ### 高斯模糊 ```python= from PIL import ImageFilter #模糊濾鏡 blurred_image = image.filter(ImageFilter.GaussianBlur(radius=100)) #高斯模糊(GaussianBlur)為濾波器的一種 combined_image = concatenate_images(image, blurred_image) plt.imshow(combined_image) plt.axis('off') # 不顯示座標軸 plt.show() ``` 高斯模糊後與原本圖片合併,結果: ![image](https://hackmd.io/_uploads/SkQ8pbT7T.png) ### 套用反RGB ```python= width, height = image.size #得到該圖片長度寬度 negative_image = Image.new("RGB", (width, height)) #創建一個大小相同空白圖片 # 遍歷每格PIXEL取得像素值 for x in range(width): for y in range(height): pixel = image.getpixel((x, y)) #它是取每個位置(x,y)的(r,g,b)值 inverted_pixel = tuple(255 - value for value in pixel) #反RGB是用256減去該RGB值 negative_image.putpixel((x, y), inverted_pixel) #在該圖片的像素位置上填充反轉後RGB combined_image = concatenate_images(image, negative_image) plt.imshow(combined_image) plt.axis('off') # 不顯示座標軸 plt.show() ``` 結果為: ![image](https://hackmd.io/_uploads/rJJ9C-pmp.png)