Остановите веб-камеру после того, как она обнаружит определенный цвет
Я написал код, который обнаруживает светло-розовый цвет. Теперь я хочу добавить код, который автоматически закроет веб-камеру после обнаружения светло-розового цвета. Можете ли вы помочь мне с этим? Вот отредактированный код:
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_pink = np.array([160,50,50])
upper_pink = np.array([180,255,255])
mask = cv2.inRange(hsv, lower_pink, upper_pink)
# 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)
break
if(cv2.countNonZero(mask) > 0):
print("FOUND")
raise SystemExit
cv2.destroyAllWindows()
1 ответ
Цикл с безусловным break
(и не возможно continue
) не имеет смысла, потому что тогда это семантически не цикл.
Тест должен быть в цикле, потому что вы хотите применить его к каждому захваченному изображению, пока не дойдете до первого с достаточным количеством розового в нем. А потом break
петля. Не выходите из программы здесь, потому что тогда код очистки после цикла больше не выполняется. Выход с помощью повышения SystemExit
в любом случае немного странно, вот что sys.exit()
Функция предназначена для выполнения.
import cv2
import numpy as np
def main():
lower_pink = np.array([160, 50, 50])
upper_pink = np.array([180, 255, 255])
threshold = 100 # TODO Adapt to your needs.
cap = cv2.VideoCapture(0)
while True:
_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower_pink, upper_pink)
masked = cv2.bitwise_and(frame, frame, mask=mask)
cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('masked', masked)
# if cv2.countNonZero(mask) > threshold:
# print('FOUND')
# break
print(cv2.countNonZero(mask))
#
# Wait for escape key.
#
if cv2.waitKey(500) == 27:
break
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
Фактический пороговый тест закомментирован и заменен печатью количества пикселей в маске, чтобы вы могли определить, какое значение будет соответствовать вашим потребностям.