错误代码
一下代码想法很自然,得到frame 之后就imshow一下,然后sleep一下等待显示。但是实际情况是窗口卡死,无法显示图片。
# 导入opencv模块
import cv2
import time
# 捕捉帧,默认摄像头是0 但是我测试之后1才可以正常显示
capture = cv2.VideoCapture(1)
# 循环显示帧
while 1:
ret, frame = capture.read()
# 显示窗口第一个参数是窗口名,第二个参数是内容
cv2.imshow('frame', frame)
cv2.imwrite('1.jpg', frame)
time.sleep(1)
capture.release() # 释放摄像头
cv2.destroyAllWindows()
正确代码
在imshow函数之后,加入waitKey函数。
# 导入opencv模块
import cv2
# 捕捉帧,默认摄像头是0 但是我测试之后1才可以正常显示
capture = cv2.VideoCapture(1)
# 循环显示帧
while 1:
ret, frame = capture.read()
# 显示窗口第一个参数是窗口名,第二个参数是内容
cv2.imshow('frame', frame)
cv2.imwrite('1.jpg', frame)
if cv2.waitKey(1) == ord('q'): # 按Q退出
break
capture.release() # 释放摄像头
cv2.destroyAllWindows()
waitKey函数
- 函数的输入和输出
int waitKey(int delay=0)
delay-延时的时间,单位ms;如果在此期间有按键按下,则立即结束并返回按键的ASCII码,否则超时返回-1;
如果delay=0,表示无限期等待键盘输入; - 有了这个函数之后,用过imshow后,才会显示图片。