Окно Python opencv зависает при использовании высоких значений HSV с низкой границей - определение формы

Я работаю над программой определения цвета фигуры, используя Python opencv. Алгоритм, который я имею, преобразовывает входной поток камеры в HSV, затем в градацию серого и выполняет некоторые алгоритмы для распознавания формы.

Все работает нормально, пока я не использую диапазон для значения "Hue" (HSV) с высокой нижней границей (больше 100), то же самое относится к диапазонам "Saturation" и "Value". Вот код:

from shapedetector import ShapeDetector
import numpy as np
import imutils
import cv2

cap = cv2.VideoCapture(0)
ilowH = 5
ihighH = 68
ilowS = 23
ihighS = 255
ilowV = 144
ihighV = 169



while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    cv2.imshow('camera',frame)
    resized = imutils.resize(frame, width=300)
    ratio = frame.shape[0] / float(resized.shape[0])
    # Our operations on the frame come here
    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)
    print("hi")    #gets printed the whole time,even when the window freezes
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)[1]
    # find contours in the thresholded image
    cnts = cv2.findContours(thresh.copy(), cv2.RETR_TREE,
            cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if imutils.is_cv2() else cnts[1]
    sd = ShapeDetector()
    cv2.imshow('frame',gray)
cap.release()
cv2.destroyAllWindows()

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

Вот некоторые примеры значений, которые я пробовал:

Замерзает с этими значениями:

#sample 1
ilowH = 142
ihighH = 179    
ilowS = 58
ihighS = 183
ilowV = 100
ihighV = 255

#sample 2 
ilowH = 150
ihighH = 179
ilowS = 100
ihighS = 186
ilowV = 0
ihighV = 255

#sample 3
ilowH = 50
ihighH = 179    
ilowS = 100
ihighS = 186
ilowV = 100
ihighV = 255

#sample 4 
ilowH = 0
ihighH = 179    
ilowS = 150
ihighS = 186
ilowV = 100
ihighV = 255

#sample 5
ilowH = 130
ihighH = 179
ilowS = 70
ihighS = 186
ilowV = 100
ihighV = 255

Прекрасно работает с этими значениями:

#sample 1    
ilowH = 150
ihighH = 179    
ilowS = 50
ihighS = 186
ilowV = 0
ihighV = 255

#sample 2
ilowH = 130
ihighH = 179
ilowS = 0
ihighS = 186
ilowV = 100
ihighV = 255

#sample 3
ilowH = 130
ihighH = 179
ilowS = 50
ihighS = 186
ilowV = 100
ihighV = 255

#sample 4 (most effiecient)
ilowH = 0
ihighH = 179
ilowS = 0
ihighS = 186
ilowV = 0
ihighV = 255

0 ответов

Другие вопросы по тегам