Как обнаружить разные цвета - PullRequest
2 голосов
/ 08 апреля 2019

Я изучаю фильтрацию изображений с помощью opencv.Я написал некоторый код, но мой код мог обнаруживать только объекты с красным цветом. Как я могу обнаружить объекты с другими цветами.

Я пробовал разные значения массива, но я не удовлетворен выводом

hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)

lower_blue = np.array([150,150,0])
upper_blue = np.array([255,255,225])

mask = cv2.inRange(hsv,lower_blue,upper_blue)
res = cv2.bitwise_and(frame,frame,mask=mask)
cv2.imshow('res',res)

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Вам просто нужно изменить граничные значения (в вашем случае lower_blue и upper_blue) на разные значения. Значения могут варьироваться в зависимости от заданного значения [0

Удачи!

HSV values

0 голосов
/ 08 апреля 2019

Во-первых, диапазон H должен быть от 0 до 179. Чтобы понять, какая комбинация значений HSV дает, какой цвет здесь является небольшим фрагментом кода.Ниже код создает трекбары для H, S, V. Настройте трекбары, чтобы сегментировать разные цвета.

import cv2
import numpy as np

def nothing(x):
    pass

cap = cv2.VideoCapture(0) 

# Create a window
cv2.namedWindow('image',cv2.WINDOW_NORMAL)


# create trackbars for color change
cv2.createTrackbar('lowH','image',0,179,nothing)
cv2.createTrackbar('highH','image',179,179,nothing)

cv2.createTrackbar('lowS','image',0,255,nothing)
cv2.createTrackbar('highS','image',255,255,nothing)

cv2.createTrackbar('lowV','image',0,255,nothing)
cv2.createTrackbar('highV','image',255,255,nothing)

while(True):
    ret, frame = cap.read()

    # get current positions of the trackbars
    ilowH = cv2.getTrackbarPos('lowH', 'image')
    ihighH = cv2.getTrackbarPos('highH', 'image')
    ilowS = cv2.getTrackbarPos('lowS', 'image')
    ihighS = cv2.getTrackbarPos('highS', 'image')
    ilowV = cv2.getTrackbarPos('lowV', 'image')
    ihighV = cv2.getTrackbarPos('highV', 'image')

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    lower_hsv = np.array([ilowH, ilowS, ilowV])
    higher_hsv = np.array([ihighH, ihighS, ihighV])
    mask = cv2.inRange(hsv, lower_hsv, higher_hsv)

    frame = cv2.bitwise_and(frame, frame, mask=mask)
    cv2.imshow('image', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...