When OpenCV
has problem to get frame from camera or stream then it doesn't raise error but it return False
in ret
(return status) so you should check it. It also return None
in frame
and imshow
has problem to display None
- it has no width and height - so you get error with size.width>0 && size.height>0
As I know mostly laptop webcame has number 0
, not 1
This works with my laptop webcam
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()
EDIT: as said Dave W. Smith in comment: some laptops may need time to send correct image then here version which doesn't exit loop
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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…