在 Python 中轉換影象為灰度

Muhammad Waiz Khan 2023年1月30日 2021年2月28日
  1. 在 Python 中使用 pillow 庫的 image.convert() 方法將影象轉換為灰度影象
  2. 在 Python 中使用 scikit-image 模組的 color.rgb2gray() 方法將影象轉換為灰度
  3. 在 Python 中使用 OpenCV 庫的 cv2.imread() 方法將影象轉換為灰度
  4. 在 Python 中使用轉換公式和 Matplotlib 庫將影象轉換為灰度影象
在 Python 中轉換影象為灰度

本教程將講解用 Python 將影象轉換為灰度影象的各種方法。灰度影象是指單個畫素代表光量或只包含光強度資訊的影象。它是一種單維影象,只具有不同的灰度顏色。

由於灰度影象是單維的,所以在各種問題中以及 Canny 邊緣檢測等演算法中,灰度影象被用來降低模型的訓練複雜性。

本文將探討我們如何在 Python 中使用 Python 模組的各種方法將影象轉換為灰度或將影象讀為灰度。

在 Python 中使用 pillow 庫的 image.convert() 方法將影象轉換為灰度影象

image.convert(mode, ..) 方法將影象作為輸入,並將其轉換為 mode 引數中指定的所需影象型別。模式包括 1 位和 8 位畫素的黑白影象、RGB 影象、HSV 影象、BGR 影象和 LAB 影象等。

由於我們要將影象轉換為灰度影象,我們可以傳遞 1 作為模式引數,表示 1 位黑白模式,L 表示 8 位黑白影象,LA 表示 alpha 模式。下面的示例程式碼演示瞭如何在 Python 中使用 pillow 庫的 image.convert() 方法將影象轉換為灰度。

from PIL import Image

img = Image.open('test.jpg')
imgGray = img.convert('L')
imgGray.save('test_gray.jpg')

原始影象。

影象示例

轉換的灰度影象。

灰度影象示例

在 Python 中使用 scikit-image 模組的 color.rgb2gray() 方法將影象轉換為灰度

color.rgb2gray() 將 RGB 格式的影象作為輸入,並返回輸入影象的灰度副本。下面的程式碼示例演示瞭如何使用 scikit-image 模組中的 color.rgb2gray() 方法在 Python 中獲取一個灰度影象。

from skimage import color
from skimage import io

img = io.imread('test.jpg')
imgGray = color.rgb2gray(img)

在 Python 中使用 OpenCV 庫的 cv2.imread() 方法將影象轉換為灰度

另一種獲取灰度影象的方法是直接讀取灰度模式下的影象,我們可以使用 OpenCV 庫中的 cv2.imread(path, flag) 方法來讀取灰度影象。

假設 cv2.imread() 方法的 flag 值等於 1,在這種情況下,它將讀取不包括 alpha 通道的影象,如果 0 則讀取灰度影象,如果等於 -1 方法則讀取包括 alpha 通道資訊的影象。

因此,我們可以使用 imread() 方法,通過將 flag 引數值傳遞為 1,從給定的路徑中讀取影象為灰度影象。

下面的示例程式碼演示瞭如何使用 cv2.imread() 方法在 Python 中讀取灰度影象。

import cv2

imgGray = cv2.imread('test.jpg',0)

在 Python 中使用轉換公式和 Matplotlib 庫將影象轉換為灰度影象

我們還可以使用標準的 RGB 到灰度的轉換公式將影象轉換為灰度,即 imgGray = 0.2989 * R + 0.5870 * G + 0.1140 * B

我們可以使用 Python 中的 Matplotlib 庫來實現這個方法,首先我們需要使用 mpimg.imread() 方法來讀取影象,然後得到 RGB 影象的紅、藍、綠三個維度的矩陣,得到矩陣後我們就可以對它們應用公式來得到灰度影象。我們需要將完整的矩陣與公式中給出的值相乘,得到灰度影象。

下面的程式碼示例演示了我們如何在 Python 中使用 Matplotlib 庫實現 RGB 到灰度的轉換公式。

from matplotlib import pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('test.jpg')

R, G, B = img[:,:,0], img[:,:,1], img[:,:,2]
imgGray = 0.2989 * R + 0.5870 * G + 0.1140 * B
plt.imshow(imgGray, cmap='gray')
plt.show()

相關文章 - Python Image