在 OpenCV 中,將圖片從 BGR 色彩空間轉換為灰階圖像時常用cv2.COLOR_BGR2GRAY
,此函數使用了特定的權重來計算灰階值。這些權重是基於人眼對不同顏色的敏感度進行調整的。
BGR2GRAY
權重這些權重反映了人眼對不同顏色的敏感度,綠色對人眼的影響最大,因此權重最高,而藍色的影響最小,因此權重最低。
但相反的在AVI檢測,如果特徵是紅色或者是藍色,都使用這個方式來轉換灰階,這樣顏色的特徵性就會降低。
本文將介紹使用其他方法來提取出特定的色彩通道。
表示顏色的色調,它用角度來表示,範圍通常為 0 到 360 度。這些角度對應於顏色在色環中的位置:
色相可以用來區分不同的顏色。
H
(色相)值的範圍是0到180 而不是 0 到 360Saturation 表示顏色的鮮艷程度或純度,範圍通常為 0 到 100%。飽和度為 0% 表示灰色(完全沒有顏色),而飽和度為 100% 表示純色(顏色最鮮豔)。
Value(明度):
Value 表示顏色的亮度或光強度,範圍通常為 0 到 100%。明度為 0% 時表示黑色(完全沒有光),而明度為 100% 時表示最亮的顏色。
S
(飽和度)和 V
(明度)的範圍是 0 到 255。V為明亮度,
def __Color_split_img(img: np.ndarray, Color_split_choose: str):
'''
Changing Colorspace for BGR -> Gray,R,G,B,H,S,V
'''
if len(img.shape) == 2:
return img
if Color_split_choose == 'Gray':
split_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
elif Color_split_choose in ('R','G','B'):
B, G, R, = cv2.split(img)
if Color_split_choose == 'R':
split_img = R
elif Color_split_choose == 'G':
split_img = G
elif Color_split_choose == 'B':
split_img = B
elif Color_split_choose in ('H','S','V'):
H, S, V, = cv2.split(img)
if Color_split_choose == 'H':
split_img = H
elif Color_split_choose == 'S':
split_img = S
elif Color_split_choose == 'V':
split_img = V
else:
return img
return split_img
cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
來完成的。else
分支中,如果用戶輸入了一個無效的 Color_split_choose
選項,程式將返回原始圖片,以防止未定義行為的發生。