Окно 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