import cv2 as cv
def video_demo():
#0是代表摄像头编号,只有一个的话默认为0
capture=cv.VideoCapture(0)
if not cap.isOpened():
print("Cannot open camera")
exit()
while(True):
ref,frame=capture.read()
cv.imshow("1",frame)
#等待30ms显示图像,若过程中按“Esc”退出
c= cv.waitKey(30) & 0xff
if c==27:
capture.release()
break
video_demo()
cv.destroyAllWindows()
cv.VideoCapture(0)
:读取视频,当输入为0时默认打开的是电脑摄像头,也可以如输入视频文件的路径。
capture.read()
: 返回两个值ref
和frame
,前者为True
或False
表示有没有读取到图片,后者参数表示截取到的每一张图片。
cv.inshow('name', frame)
:显示图片,没有返回值,第一个参数为窗口的名称,第二个参数为要显示的图片。
cv.waitKey(30) & 0xff
: cv.waitKey(delay)函数如果delay为0就没有返回值,如果delay大于0,如果有按键就返回按键值,如果没有按键就在delay秒后返回-1,0xff的ASCII码为1111 1111,任何数与它&操作都等于它本身。Esc
按键的ASCII码为27,所以当c==27时,摄像头释放。更多关于函数的解释可以参考博客。(我有点没明白的是,如果没有按键返回-1与0xff进行&运算会是什么结果,我试了一下在30s前后按Esc都没有区别,30s后摄像头也不会自动释放,所以不太明白这个delay30s的用意是在哪里。)
cv.destroyAllWindows()
: 清除所有方框界面
本文原载于我的简书博客