[英]Detecting thresholds in HSV color space (from RGB) using Python / PIL
[英]Trouble with detecting color from HSV image using OpenCV and Python
我正在嘗試使用OpenCV和Python執行簡單的彩色對象檢測。
我已閱讀了幾個教程,但遇到一個讓我無法進步的令人困惑的問題。 雖然我提供了正確的數據HSV,但我的程序似乎沒有檢測到那種顏色的對象。
我使用這張圖片(抱歉我的網絡攝像頭質量很差):
為了檢測紅色物體,我恢復了HSV顏色數據:
這是我的代碼:
YELLOW = 30
BLUE = 210
GREEN = 145
RED = 320
color = RED
img = cv2.imread("sample.png")
hue = color // 2
lower_range = np.array([max(0, hue - 10), 0, 0], dtype=np.uint8)
upper_range = np.array([min(180, hue + 10), 255, 255], dtype=np.uint8)
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(img, lower_range, upper_range)
binary_img = cv2.bitwise_and(img_hsv, img_hsv, mask=mask)
binary_img = cv2.cvtColor(binary_img, cv2.COLOR_BGR2GRAY)
_, binary_img = cv2.threshold(binary_img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('sample', binary_img)
cv2.waitKey(0)
結果:
其他顏色的結果是正確的(不完美,因為我猜的質量很差),但我不能得到紅色的東西。 然而,HSV轉換的圖像非常明確:
你知道我做錯了什么嗎?
您正在做的一切正確,唯一的問題是您在BGR圖像而不是HSV上應用閾值。
更改:
mask = cv2.inRange(img, lower_range, upper_range)
至
mask = cv2.inRange(img_hsv, lower_range, upper_range)
我測試了它看起來很好。 我想你需要一些形態學操作來得到你的最終結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.