python+opencv入門-色彩空間及其變換

python+opencv入門-色彩空間及其變換

任務描述

理解色彩空間,並使用OpenCV進行色彩空間轉換。

相關知識

你需要掌握:1. 什麼是色彩空間;2.如何轉換色彩空間。

色彩空間

色彩空間(Color space)是對色彩的組織方式,是座標系統和子空間的闡述,位於系統的每種顏色都有單個點表示。
目前,色彩空間已經有上百種表示方式,被採用的大多數色彩空間都是面向硬件或面向應用的,大部分只是局部的改變或專用於某一領域。下面我們介紹一些常用的色彩空間。

RGB色彩空間

我們知道,可以使用紅色、綠色和藍色這三種原色生成不同的顏色,這些顏色可以組成了一個色彩空間,稱爲RGB(Red Green Blue)色彩空間。
RGB是依據人眼識別的顏色定義出的空間,可表示大部分顏色。它是最通用的面向硬件的色彩空間。該色彩空間用於彩色監視器和一大類彩色視頻攝像。
在該色彩空間中,將藍色的量定義爲X座標軸、紅色的量定義爲Y座標軸、綠色的量定義爲Z座標軸,就可以得到一個三維空間。所以每種顏色在這個三維空間中都有唯一的一個點與其對應。
完整的RGB色彩空間圖如下:
RGB色彩空間圖
OpenCV中默認的色彩空間是BGR。BGR與RGB的區別只是三個顏色信道的位置發生了變化,實際上原理相同。
爲什麼是BGR而不是RGB呢?原因在於當時主流的攝像頭製造商和軟件供應商都普遍使用這種BGR格式,所以所以一開始時OpenCV採用的就是BGR,然後沿用至今。

HSV與HSL色彩空間

在科學研究一般不採用RGB色彩空間,它將色調,亮度,飽和度三個量放在一起表示,很難分開,這樣難以對其進行數字化的調整。所以爲了更好的數字化處理顏色,提出了HSV,HSL兩個色彩空間。
HSV色彩空間中,H是色調(hue),S是飽和度(saturation), V是明度(value)。
HSL色彩空間中,H是色調(hue),S是飽和度(saturation),L是亮度(lightness)。

灰度空間

在OpenCV的灰度空間中,和一般的色彩空間相同,每一個顏色都有三個量,但是隻有第一個亮度有值,所以表示爲(亮度,0,0)。
其中,亮度是根據如下灰度公式計算而得:

Gray = R*0.299 + G*0.587 + B*0.114

爲什麼人臉識別需要先對圖片進行灰度處理?

識別人臉,最關鍵的因素是梯度,梯度代表着邊緣,用灰度圖計算梯度,可以簡化矩陣, 提高運算速度。
而顏色信息,很容易受到光照等因素的影響,同類的物體顏色有很多變化,所以顏色本身難以提供關鍵信息。

色彩空間轉換

在OpenCV中有超過150種色彩空間轉換的方法。但是我們經常用到的是以下兩種:
1.BGR空間到Gray空間 的轉換;
2. BGR空間到HSV空間 的轉換。
使用的函數爲:cv2.cvtColor()。
它的函數聲明爲:

cv2.cvtColor(圖片對象,轉換類型)

其中,轉換類型,對於BGR到Gray的轉換,使cv2.COLOR_BGR2GRAY類型。
同樣的,對於BGR到HSV的轉換,使用cv2.COLOR_BGR2HSV類型。
示例如下:

# 將圖片的色彩空間由BGR轉換爲HSV
# 執行後output_img的色彩空間變成了HSV
output_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

我們也可以通過以下代碼獲取到OpenCV提供的所有轉換類型:

import cv2
flags=[i for in dir(cv2) if i startswith('COLOR_')]
print(flags)

編程要求

將圖片的色彩空間轉換爲灰度空間;
將處理後的圖片保存到路徑step2/out/girl-gray.jpg下。

import cv2
# 加載圖片
filename = "step2/image/girl.jpg"
img = cv2.imread(filename)
#********** Begin **********#
# 將圖片的色彩空間由BGR轉換GRAY

#********** End **********#
save_image_path = "step2/out/girl-gray.jpg"
#********** Begin **********#
# 保存圖片

#********** End **********#

= ======================answe= ======= ===============

import cv2
# 加載圖片
filename = "step2/image/girl.jpg"
img = cv2.imread(filename)
#********** Begin **********#
# 將圖片的色彩空間由BGR轉換GRAY
output_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#********** End **********#
save_image_path = "step2/out/girl-gray.jpg"
#********** Begin **********#
# 保存圖片
cv2.imwrite(save_image_path,output_img)
#********** End **********#
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章