Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
259 views
in Technique[技术] by (71.8m points)

python - use cv2.VideoCapture to capture a picture

I want to use my laptop webcam to capture a picture using the code below:

import cv2
cap = cv2.VideoCapture(1)
while(True):
    ret, frame = cap.read()
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()


cv2.destroyAllWindows()

but it throws this error:

cv2.imshow('frame', frame) cv2.error: OpenCV(4.0.0) C:projectsopencv-pythonopencvmoduleshighguisrcwindow.cpp:350: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

How can I fix this error?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...