HSV顏色空間
????????與RGB顏色空間相比,HSV顏色空間更適合進行顏色分析和提取特定顏色的目標。在HSV空間中,顏色信息被分布在不同的通道上,使我們能夠更準確地定義顏色的范圍,并使用閾值操作輕松地分離出我們感興趣的區域部分。
? ? ? ? HSV三個通道的含義:
-
色相(Hue)表示顏色的類型或種類,而不受光照變化的影響。
-
飽和度(Saturation)表示顏色的純度或鮮艷程度。
-
明度(Value)表示顏色的亮度。
? ? ? ? 在提取期望顏色區域時,參考博客給出的HSV顏色識別-HSV基本顏色分量范圍-CSDN博客
滑動條交互界面的代碼實現?
# 通過滑動條動態觀察不同的HSV的閾值下圖像可顯示區域的變化過程import cv2
import numpy as npdef on_trackbar_min_hue(value):global min_huemin_hue = valuedef on_trackbar_max_hue(value):global max_huemax_hue = valuedef on_trackbar_min_saturation(value):global min_saturationmin_saturation = valuedef on_trackbar_max_saturation(value):global max_saturationmax_saturation = valuedef on_trackbar_min_value(value):global min_valuemin_value = valuedef on_trackbar_max_value(value):global max_valuemax_value = value# 創建一個空窗口
cv2.namedWindow('Color Range Visualization')# 創建滑動條并初始化HSV最小和最大值
min_hue, max_hue = 100, 130
min_saturation, max_saturation = 40, 255
min_value, max_value = 80, 255# 創建滑動條
cv2.createTrackbar('Min Hue', 'Color Range Visualization', min_hue, 179, on_trackbar_min_hue)
cv2.createTrackbar('Max Hue', 'Color Range Visualization', max_hue, 179, on_trackbar_max_hue)
cv2.createTrackbar('Min Saturation', 'Color Range Visualization', min_saturation, 255, on_trackbar_min_saturation)
cv2.createTrackbar('Max Saturation', 'Color Range Visualization', max_saturation, 255, on_trackbar_max_saturation)
cv2.createTrackbar('Min Value', 'Color Range Visualization', min_value, 255, on_trackbar_min_value)
cv2.createTrackbar('Max Value', 'Color Range Visualization', max_value, 255, on_trackbar_max_value)# 讀取示例圖像
image = cv2.imread("YOUR IMAGE PATH")
image = cv2.resize(image,(700,700)) # 圖片過小的話,窗口容不下這些控件
print(image.shape)while True:# 轉換圖像到HSV顏色空間hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# 創建一個包含最小和最大HSV值的NumPy數組lower_range = np.array([min_hue, min_saturation, min_value])upper_range = np.array([max_hue, max_saturation, max_value])# 根據HSV范圍創建掩碼mask = cv2.inRange(hsv_image, lower_range, upper_range)# 將掩碼應用于原始圖像result = cv2.bitwise_and(image, image, mask=mask)# 在顯示窗口上實時顯示滑動條的數值text1 = f"Min Hue: {min_hue} Max Hue: {max_hue}"cv2.putText(result, text1, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2, cv2.LINE_AA)text2 = f"Min Saturation: {min_saturation} Max Saturation: {max_saturation} "cv2.putText(result, text2, (10, 70), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2, cv2.LINE_AA)text3 = f"Min Value: {min_value} Max Value: {max_value}"cv2.putText(result, text3, (10, 110), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2, cv2.LINE_AA)# 顯示結果圖像cv2.imshow('Original Image', image)cv2.imshow('Color Range Visualization', result)# 按下Esc鍵退出if cv2.waitKey(1) == 27:break# 釋放窗口和銷毀所有創建的窗口
cv2.destroyAllWindows()
運行結果示例
????????通過拉動上方的滑動條,不在滑動條對應的HSV范圍內區域將被[0,0,0]的mask淹沒,即可以實時可視化選定HSV范圍內的區域。
????????如下圖所示,三張圖片依次為:滑動條窗口,選定HSV范圍內的區域可視化,輸入的原圖像