在 Python 中转换图像为灰度

Muhammad Waiz Khan 2024年2月15日
  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