OpenCV 和 Python 中的顏色空間


顏色空間是指不同型別的顏色模式,用於影像處理和訊號與系統等各種目的。

Open CV 是一個流行的計算機視覺庫,用 C/C++ 編寫,並提供 Python 的繫結。OpenCV 提供了操作顏色空間的簡便方法。OpenCV 是開源的,並提供了影像處理中各種有用的演算法。

在計算機視覺中,顏色使用顏色空間來表示。目前,計算機視覺和影像處理中使用了許多顏色空間,每個顏色空間都有其獨特的特徵和優勢。下面描述了一些影像處理中非常常見的顏色空間:

RGB 顏色空間

讓我們看看 RGB 顏色空間。它是影像處理中最常用和最流行的顏色空間之一。在此顏色空間中,影像表示為三種顏色(紅色、綠色和藍色)的組合,每種顏色都分配有某個值,該值範圍從 0 到 255。值越大,該顏色的存在感越強。透過這三種顏色的組合,我們可以產生可見光譜中所有可能的顏色。

OpenCV 的 cv2.imread() 函式可用於讀取影像檔案並返回一個 NumPy 陣列,該陣列表示影像的畫素值。畫素值表示為集合 (B, G, R),其中 B、G 和 R 分別表示藍色、綠色和紅色通道的強度值。

示例

在下面的示例中,我們讀取影像並使用 cv2.imshow() 函式分離特定影像的不同顏色通道。

這將返回三個單獨的陣列,分別對應於三種顏色(紅色、綠色和藍色),並在兩個影像之間等待按鍵。

然後它顯示這些具有對應顏色的影像。最後,透過 destroyAllWindows() 函式關閉所有影像。

import cv2
image = cv2.imread(image.jpg)
B, G, R = cv2.split(image)

# Corresponding channels are separated
cv2.imshow("original", image)
cv2.waitKey(0)
cv2.imshow("blue", B)
cv2.waitKey(0)
cv2.imshow("Green", G)
cv2.waitKey(0)
cv2.imshow("red", R)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出

原始影像

藍色影像

綠色影像

紅色影像

HSV 顏色空間

HSV 代表色相、飽和度和值。色相通道表示顏色的色調,飽和度通道表示顏色的強度或純度。值通道表示顏色的亮度。

它在基於顏色的影像分割任務中特別有用,在這些任務中,我們需要隔離影像中的特定顏色。在 OpenCV 中,我們可以使用 cv2.cvtColor() 函式將 RGB 影像轉換為 HSV 顏色空間。

import cv2
import numpy as np

# Read an image in RGB color space
image = cv2.imread('image.jpg')

# show original image
cv2.imshow("original image",image)
cv2.waitKey(0)

# Convert the image to HSV color space
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# show hsv image
cv2.imshow("hsv image",hsv_image)
cv2.waitKey(0)

輸出

原始影像 -

HSV 影像 -

YCbCr 顏色空間

YCbCr 顏色空間將影像的亮度 (Y) 和色度 (CbCr) 分量分開。Y 通道表示顏色的亮度,而 Cb 和 Cr 通道分別表示藍色和紅色的顏色差。

它在影片壓縮和傳輸中特別有用,因為它可以用來減少表示影像或影片流所需的資料量。

在 OpenCV 中,我們可以透過將 cv2.COLOR_BGR2YCrCb 和輸入影像作為引數傳遞給 cv2.cvtColor() 函式,將 RGB 影像轉換為 YCbCr 顏色空間。

import cv2
import numpy as np

# Read an image in RGB color space
image = cv2.imread('image5.jpg')

# show original image
cv2.imshow("original image",image)
cv2.waitKey(0)

# Convert the image to YCbCr color space
ycbcr_image = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb)

# show ycbcr image
cv2.imshow("ycbcr image", ycbcr_image)
cv2.waitKey(0)

輸出

原始影像 -

YCbCr 影像 -

其他一些顏色空間包括:

  • LAB 顏色空間

  • LUV 顏色空間

  • XYZ 顏色空間

  • CMYK 顏色空間

結論

在本文中,我們討論了 OpenCV 和 Python 中一些最常用的顏色空間。我們討論了 RGB、HSV 和 YCbCr 顏色空間。我們還學習瞭如何使用 OpenCV 庫中的 cv2.cvtColor() 函式將影像從一個顏色空間轉換為另一個顏色空間。我們瞭解了不同的顏色空間以及它們在 OpenCV 中的工作原理。我們可以使用它來相應地處理和分析不同的影像,並從中提取所需的資訊。我們學習了不同顏色空間的優缺點,以及針對特定任務選擇哪種顏色空間。

更新於: 2023年4月20日

3K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.