一文教你如何利用 Python 進行圖像處理
圖像處理是計算機視覺領域的一個重要分支,廣泛應用于各種場景,如社交媒體濾鏡、醫療影像分析、自動駕駛等。Python 作為一門強大的編程語言,提供了多種庫來幫助我們輕松地進行圖像處理。今天,我們就一起來學習如何使用 Python 進行圖像處理。
1. 安裝必要的庫
首先,我們需要安裝一些常用的圖像處理庫。最常用的是 Pillow 和 OpenCV。你可以使用以下命令來安裝它們:
pip install pillow opencv-python
2. 使用 Pillow 庫讀取和顯示圖像
Pillow 是 Python Imaging Library (PIL) 的一個分支,提供了豐富的圖像處理功能。我們先來看如何使用 Pillow 讀取和顯示圖像。
from PIL import Image
# 讀取圖像
image = Image.open('example.jpg')
# 顯示圖像
image.show()
這段代碼首先導入了 Image 模塊,然后使用 Image.open() 方法讀取圖像文件,最后使用 image.show() 方法顯示圖像。
3. 圖像的基本操作
(1) 裁剪圖像
裁剪圖像是一個常見的操作,可以通過指定坐標來實現。
# 裁剪圖像
cropped_image = image.crop((50, 50, 200, 200))
cropped_image.show()
這里,crop() 方法接受一個元組 (left, upper, right, lower),表示裁剪區域的左上角和右下角坐標。
(2) 調整圖像大小
調整圖像大小可以使用 resize() 方法。
# 調整圖像大小
resized_image = image.resize((300, 300))
resized_image.show()
resize() 方法接受一個元組 (width, height),表示新的寬度和高度。
(3) 旋轉圖像
旋轉圖像是另一個常見的操作。
# 旋轉圖像
rotated_image = image.rotate(90)
rotated_image.show()
rotate() 方法接受一個角度值,表示旋轉的角度。
4. 使用 OpenCV 進行圖像處理
OpenCV 是一個強大的計算機視覺庫,提供了更多的圖像處理功能。我們來看一些基本的操作。
(1) 讀取和顯示圖像
import cv2
# 讀取圖像
image = cv2.imread('example.jpg')
# 顯示圖像
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
這里,cv2.imread() 用于讀取圖像,cv2.imshow() 用于顯示圖像,cv2.waitKey(0) 用于等待用戶按鍵,cv2.destroyAllWindows() 用于關閉所有窗口。
(2) 轉換為灰度圖像
將彩色圖像轉換為灰度圖像是一個常見的操作。
# 轉換為灰度圖像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.cvtColor() 方法用于顏色空間轉換,cv2.COLOR_BGR2GRAY 表示將 BGR 顏色空間轉換為灰度。
(3) 邊緣檢測
邊緣檢測是計算機視覺中的一個重要任務。
# 邊緣檢測
edges = cv2.Canny(gray_image, 100, 200)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.Canny() 方法用于邊緣檢測,接受兩個閾值參數,分別表示低閾值和高閾值。
5. 實戰案例:圖像分類
假設我們有一個簡單的圖像分類任務,需要識別圖像中的貓和狗。我們可以使用預訓練的深度學習模型來完成這個任務。這里我們使用 Keras 和 TensorFlow。
import tensorflow as tf
from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input, decode_predictions
from tensorflow.keras.preprocessing import image
import numpy as np
# 加載預訓練模型
model = ResNet50(weights='imagenet')
# 讀取圖像
img_path = 'cat_or_dog.jpg'
img = image.load_img(img_path, target_size=(224, 224))
# 預處理圖像
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
# 預測
preds = model.predict(x)
print('Predicted:', decode_predictions(preds, top=3)[0])
這段代碼首先加載了一個預訓練的 ResNet50 模型,然后讀取并預處理圖像,最后進行預測并輸出結果。