簡體   English   中英

如何在 Python-OpenCV 中使用 `cv2.inRange` 檢測兩種不同的顏色?

[英]How to detect two different colors using `cv2.inRange` in Python-OpenCV?

如何定義兩種不同顏色的“下”和“上”范圍,例如紅色和藍色(因為紅色和藍色在 HSV 顏色中並不相鄰)

這個屬於紅色:

lower_red = np.array([160,20,70])
upper_red = np.array([190,255,255])

而這個屬於藍色:

lower_blue = np.array([101,50,38])
upper_blue = np.array([110,255,255])

我嘗試使用 if 條件組合它們或創建自己的函數但不起作用,你們能告訴我解決方案嗎?

P/s:Python 中的 OpenCV

當你得到兩個color s 的掩碼時,然后使用cv2.bitwise_or來獲得最終的掩碼。

import cv2

## Read
img = cv2.imread("sunflower.jpg")

## convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

## mask of green (36,0,0) ~ (70, 255,255)
mask1 = cv2.inRange(hsv, (36, 0, 0), (70, 255,255))

## mask o yellow (15,0,0) ~ (36, 255, 255)
mask2 = cv2.inRange(hsv, (15,0,0), (36, 255, 255))

## final mask and masked
mask = cv2.bitwise_or(mask1, mask2)
target = cv2.bitwise_and(img,img, mask=mask)

cv2.imwrite("target.png", target)

來源:

在此處輸入圖片說明

找到綠色和黃色(范圍不是那么准確):

在此處輸入圖片說明


順便說一句,為了獲得更准確的范圍,這是我的相關答案中的參考地圖:

如何定義閾值以僅檢測圖像中的綠色對象:Opencv

在此處輸入圖片說明

下圖顯示了 HSV 色彩空間,它使用色調、飽和度和值(或亮度)。

HSV 色彩空間

在 HSV 顏色空間中工作時,重要的是要記住這一點,並且諸如紅色和綠色之類的概念是一種轉換回不同數據類型的方式。

因此,您的上下邊界只能是該空間中的一個點,但可以包括紅色和藍色光譜的一部分,即紫色。 您需要選擇滿足您需要的任何處理輸出標准的閾值。

要么運行兩個單獨的循環,第一個循環對紅色進行閾值處理,第二個循環對藍色進行閾值處理,然后使用OpenCV Blend 函數將兩個圖像混合在一起。 有關混合兩個顏色空間的信息,請參見此處

# Make a copy of the image

image_copy = np.copy(image)
## TODO: Define the color selection boundaries in RGB values
# play around with these values until you isolate the blue background

lower_blue = np.array([200,0,0]) 
upper_blue = np.array([250,250,255])

# Define the masked area

mask = cv2.inRange(image_copy, lower_blue, upper_blue)
# Vizualize the mask

plt.imshow(mask,cmap='gray')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM