Open Pin-Jiun opened 1 year ago
飽和度是色彩的純度或鮮豔度,以白色缺乏程度表示。飽和度 100% 的色彩不包含任何白色。飽和度 0% 的色彩帶點灰色。
飽和度是色彩的鮮豔度。想像亮橘色,這是相當鮮豔的色彩。隨著彩度降低(色相和明度保持不變),橘色就會逐次變成褐色、褐灰色,最後是中性灰色(飽和度降至 0 之後)。
降低飽和度會使色彩流失,只剩下灰階元素。褐灰色和淡紫色都是飽和度低的色彩,因為兩色皆相當中性,只有少許色彩元素。 蘋果紅和香蕉黃是飽和度很高的色彩。飽和度是可測量色彩與相同亮度的中性灰之間的差異程度。 在數位影像中,提高飽和度可讓影像色彩更鮮豔、更有「震撼力」,但是飽和度太高也會扭曲色彩,造成膚色不自然等問題。您可以使用「自然飽和色調」控制項,將目標僅設定在低飽和度的區域,而不影響影像的其餘區域。例如,您可以加強影像飽和度較低部分的色彩,而不顯著改變膚色。
從上圖我們可以看見在 HLS 顏色空間 中色彩分佈的三維座標, 分別是 Hue(顏色)、Lightness(亮度)、Saturation(飽和度), 我們能透過這三維找到我們所需要的顏色,
至於看到這三維座標所代表的意義, 相信你們已經能了解我們怎麼改變 Lightness(亮度)與Saturation(飽和度)了吧!
import cv2 img = cv2.imread('2.jpg')[:500, :500, :] img_hls = cv2.cvtColor(img, cv2.COLOR_BGR2HLS) cv2.imshow("o", img) cv2.imshow('H', img_hls[:, :, 0]) cv2.imshow('L', img_hls[:, :, 1]) cv2.imshow('S', img_hls[:, :, 2]) cv2.waitKey(0) cv2.destroyAllWindows()
def modify_lightness_saturation(img): origin_img = img # 圖像歸一化,且轉換為浮點型 fImg = img.astype(np.float32) fImg = fImg / 255.0 # 顏色空間轉換 BGR -> HLS hlsImg = cv2.cvtColor(fImg, cv2.COLOR_BGR2HLS) hlsCopy = np.copy(hlsImg) lightness = 0 # lightness 調整為 "1 +/- 幾 %" saturation = 300 # saturation 調整為 "1 +/- 幾 %" # 亮度調整 hlsCopy[:, :, 1] = (1 + lightness / 100.0) * hlsCopy[:, :, 1] hlsCopy[:, :, 1][hlsCopy[:, :, 1] > 1] = 1 # 應該要介於 0~1,計算出來超過1 = 1 # 飽和度調整 hlsCopy[:, :, 2] = (1 + saturation / 100.0) * hlsCopy[:, :, 2] hlsCopy[:, :, 2][hlsCopy[:, :, 2] > 1] = 1 # 應該要介於 0~1,計算出來超過1 = 1 # 顏色空間反轉換 HLS -> BGR result_img = cv2.cvtColor(hlsCopy, cv2.COLOR_HLS2BGR) result_img = ((result_img * 255).astype(np.uint8)) print("High Saturation:") show_img(result_img)
我們首先將int範圍 (0-255) 的顏色表示轉換為浮點數 (0-1) 這樣方便我們做比例上的運算。
在上面提供的程式碼裡面,最後的結果會改變為 1 + x/100.0, 我們改變的lightness, saturation值都是對應 x改變的% (正或負) 大小。
避免運算結果超過範圍,我們在運算後,將所有超過1的值皆設為1。
https://www.wongwonggoods.com/all-posts/python/python_opencv/opencv-lightness-saturation/
飽和度
飽和度是色彩的純度或鮮豔度,以白色缺乏程度表示。飽和度 100% 的色彩不包含任何白色。飽和度 0% 的色彩帶點灰色。
飽和度是色彩的鮮豔度。想像亮橘色,這是相當鮮豔的色彩。隨著彩度降低(色相和明度保持不變),橘色就會逐次變成褐色、褐灰色,最後是中性灰色(飽和度降至 0 之後)。
降低飽和度會使色彩流失,只剩下灰階元素。褐灰色和淡紫色都是飽和度低的色彩,因為兩色皆相當中性,只有少許色彩元素。 蘋果紅和香蕉黃是飽和度很高的色彩。飽和度是可測量色彩與相同亮度的中性灰之間的差異程度。 在數位影像中,提高飽和度可讓影像色彩更鮮豔、更有「震撼力」,但是飽和度太高也會扭曲色彩,造成膚色不自然等問題。您可以使用「自然飽和色調」控制項,將目標僅設定在低飽和度的區域,而不影響影像的其餘區域。例如,您可以加強影像飽和度較低部分的色彩,而不顯著改變膚色。
HLS 顏色空間
從上圖我們可以看見在 HLS 顏色空間 中色彩分佈的三維座標, 分別是 Hue(顏色)、Lightness(亮度)、Saturation(飽和度), 我們能透過這三維找到我們所需要的顏色,
至於看到這三維座標所代表的意義, 相信你們已經能了解我們怎麼改變 Lightness(亮度)與Saturation(飽和度)了吧!
運用 OpenCV 調整亮度、飽和度
我們首先將int範圍 (0-255) 的顏色表示轉換為浮點數 (0-1) 這樣方便我們做比例上的運算。
在上面提供的程式碼裡面,最後的結果會改變為 1 + x/100.0, 我們改變的lightness, saturation值都是對應 x改變的% (正或負) 大小。
避免運算結果超過範圍,我們在運算後,將所有超過1的值皆設為1。
https://www.wongwonggoods.com/all-posts/python/python_opencv/opencv-lightness-saturation/