Отслеживание белого цвета с помощью python opencv

Я хотел бы отслеживать белый цвет с помощью веб-камеры и python opencv. У меня уже есть код для отслеживания синего цвета.

_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

# define range of blue color in HSV
lower_blue = np.array([110,100,100])
upper_blue = np.array([130,255,255])

#How to define this range for white color


# Threshold the HSV image to get only blue colors
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(frame,frame, mask= mask)

cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)

что значения должен ли я давать как нижнюю границу, так и верхнюю границу для отслеживания белого цвета!!?? Я попытался изменить значения, и я получил другие цвета, но не повезло с белым цветом!!!

это значения HSV или значения BGR, указанные как нижняя и верхняя границы???

PS: Я должен получить последний результат как бинарное изображение для дальнейшей обработки!!

пожалуйста, помогите мне !!!

2 ответов


Я написал это для отслеживания белого цвета :

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while(1):

    _, frame = cap.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # define range of white color in HSV
    # change it according to your need !
    lower_white = np.array([0,0,0], dtype=np.uint8)
    upper_white = np.array([0,0,255], dtype=np.uint8)

    # Threshold the HSV image to get only white colors
    mask = cv2.inRange(hsv, lower_white, upper_white)
    # Bitwise-AND mask and original image
    res = cv2.bitwise_and(frame,frame, mask= mask)

    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)

    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()

Я пытался отслеживать белый экран моего телефона и получил это :

enter image description here

вы можете попробовать изменить значения HSV Вы также можете попробовать цветовое пространство HSL, как сказал легат, это было бы более точно


давайте взглянем на цветовое пространство HSV:

enter image description here

вам нужен белый, который находится близко к центру и довольно высок. Начать с

sensitivity = 15
lower_white = np.array([0,0,255-sensitivity])
upper_white = np.array([255,sensitivity,255])

а затем настройте порог в соответствии с вашими потребностями.

вы можете также рассмотрите возможность использования HSL цветовое пространство, которое обозначает оттенок, насыщенность,легкость. Тогда вам нужно будет только смотреть на легкость для обнаружения белого и распознавания других цветов, будет оставаться легким. Оба HSV и HSL держат подобные цветы близко. Также HSL, вероятно, окажется более точным для обнаружения белого-вот почему:

enter image description here