使用 OpenCV 將影像轉換為灰度


將影像轉換為灰度包括將彩色影像轉換為灰度影像。透過使用OpenCV庫中的各種方法,我們可以將彩色影像(具有多個顏色通道)轉換為灰度影像(具有單個通道)。以下是使用 OpenCV 將影像轉換為灰度的一些常用方法。

  • cv2.cvtColor():此函式用於將影像從一個顏色空間轉換為另一個顏色空間。

  • 畫素操作:它涉及手動取顏色通道的平均值以建立灰度影像。

  • 去飽和度方法:此方法嘗試透過考慮分量的最大值和最小值來保留影像的對比度。

使用 cv2.cvtColor()

cv2.cvtColor() 使用顏色通道的加權和將影像轉換為灰度,以反映人類的感知。

示例

在下面的示例程式碼中,cv2.imread() 函式載入影像,並使用 cv2.cvtColor() 函式將其轉換為灰度。

import cv2

# Read the image
image = cv2.imread('apple.jpg')

# Convert the image to grayscale
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Display the grayscale image (optional)
cv2.imshow('Grayscale Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出

輸入影像



灰度影像



使用畫素操作

這種畫素操作方法也稱為平均方法,它涉及透過手動計算每個畫素的紅色、綠色和藍色通道的強度平均值來計算灰度值。

示例

手動平均是指透過計算每個畫素的 B、G 和 R 通道的平均值來計算灰度值。

import cv2
import numpy as np

# Read the image
image = cv2.imread('apple.jpg')

# Manually convert to grayscale using the average method
gray_image = np.zeros(image.shape[:2], dtype='uint8')  

for i in range(image.shape[0]):
   for j in range(image.shape[1]):
      # Calculate the average of the B, G, R values
      gray_image[i, j] = np.mean(image[i, j])

# Display the grayscale image 
cv2.imshow('Grayscale Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出

輸入影像



灰度影像



使用去飽和度

此方法取每個畫素的紅色、綠色和藍色通道的最大值和最小值的平均值,並透過同時考慮最暗和最亮的分量來保留對比度。

示例

灰度值計算為 gray=Max(R, B, G)+Min(R, B, G)/2。由於其對真實亮度的表示,此方法與cv2.cvtColor()使用的加權方法相比,可能會返回不太準確的灰度影像。

import cv2
import numpy as np

image = cv2.imread('apple.jpg')
max_channel = np.max(image, axis=2)
min_channel = np.min(image, axis=2)
gray_image = ((max_channel + min_channel) / 2).astype(np.uint8)
cv2.imwrite('desaturation_gray_image.jpg', gray_image)

輸出

輸入影像



灰度影像


更新於: 2024年11月13日

3K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.