Когда OpenCV
имеет проблему с получением кадра с камеры или потока, это не вызывает ошибку, но возвращает False
в ret
(возвращение статуса), так что вы должны проверить это.Он также возвращает None
в frame
и imshow
имеет проблему с отображением None
- он не имеет ширины и высоты - поэтому вы получаете ошибку с size.width>0 && size.height>0
Как я знаю, в основном веб-камера ноутбука имеетчисло 0
, а не 1
Это работает с веб-камерой моего ноутбука
import cv2
cap = cv2.VideoCapture(0) # zero instead of one
while True:
ret, frame = cap.read()
if not ret: # exit loop if there was problem to get frame to display
break
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
РЕДАКТИРОВАТЬ: , как сказал Дейв В. Смит в комментарии:для некоторых ноутбуков может потребоваться время для отправки правильного изображения, а затем версия, которая не выходит из цикла
while True:
ret, frame = cap.read()
if ret: # display only if status (ret) is True and there is frame
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break