Most of the time when you read !_src.empty() in your stacktrace it means that your frame, that should be a numpy tensor with numbers within it, is empty.
I suggest you to edit your code in the following way:
video = cv2.VideoCapture(0)
while True:
if video.isOpened():
ret, frame = video.read()
if ret:
cv2.imshow("WindowFrame", frame)
if cv2.waitKey(1) == ord('q'):
break
video.release()
cv2.destroyAllWindows()
So first you create the VideoCapture()
object specifying the index of the camera
VideoCapture (int index) --> Open a camera for video capturing
Then, inside the while True
you check if the camera object has already been initialized with isOpened()
isOpened () const --> Returns true if video capturing has been initialized already.
and if this is true then you can start reading frames from the camera. You do this with video.read()
which returns a frame (in particular it reads the next frame) and a boolean value (we called it ret
) that tells you if the frame is available or not. Thus, if ret == True
, we show the frame with cv2.imshow("WindowFrame", frame)
.
Furthermore, inside your code there's an error. Since release()
method closes the camera, you can not put it inside the while True
loop
virtual void release () --> Closes video file or capturing device
Also cv2.destroyAllWindows()
must stay outside the loop because otherwise you keep opening and closing the window which shows you the frame.
https://docs.opencv.org/3.4/d8/dfe/classcv_1_1VideoCapture.html