opencv檢測圖片上七種顏色,分辨顏色和對應位置
讀取圖片:使用cv2.imread()函數讀取目標圖片。
轉換顏色空間:通常在HSV顏色空間中進行顏色檢測,因為HSV顏色空間更適合描述顏色的屬性。
定義顏色范圍:為七種顏色定義HSV范圍。例如,紅色、綠色、藍色、黃色、紫色、橙色和青色。
創建掩碼:使用cv2.inRange()函數根據定義的顏色范圍創建掩碼。
位運算:使用掩碼與原圖進行位運算,提取特定顏色的區域。
查找輪廓:使用cv2.findContours()函數查找顏色區域的輪廓。
繪制輪廓:使用cv2.drawContours()函數在原圖上繪制輪廓,以標記顏色的位置。
顏色識別:根據輪廓的位置和掩碼,識別顏色。
import cv2
import numpy as npdef color_detection():"""顏色檢測:return:"""# 讀取圖片image = cv2.imread(r'C:\Users\O_zhenhua.zhang\Desktop\cdc\AutoVehicleControl\vehicle_control_tools\received_image.jpg')# 轉換顏色空間從BGR到HSVhsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# 定義顏色的HSV范圍color_ranges = {'red':((0, 120, 70), (10, 255, 255)),'green': ((40, 40, 40), (80, 255, 255)),'blue': ((110, 110, 140), (140, 255, 255)),'yellow': ((20, 40, 40), (40, 255, 255)),'purple': ((120, 120, 140), (160, 255, 255)),'orange': ((10, 40, 40), (20, 255, 255)),'cyan': ((160, 160, 180), (180, 255, 255))}# 檢測顏色并繪制輪廓for color_name, (lower, upper) in color_ranges.items():# 創建顏色掩碼mask = cv2.inRange(hsv_image, np.array(lower), np.array(upper))# 用掩碼提取特定顏色的區域color_image = cv2.bitwise_and(image, image, mask=mask)# 尋找輪廓contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 繪制輪廓for contour in contours:area = cv2.contourArea(contour)if area > 1000: # 可根據需要調整面積閾值cv2.drawContours(image, [contour], -1, (0, 255, 0), 3) # 綠色輪廓# 顯示結果cv2.imshow('Color Detection', image)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':color_detection()