在使用cv2调用摄像头时,我们常用循环语句完成capture的read和imshow,
这使得当点击opencv窗口右上角关闭按钮时,关闭的仅仅是某个时刻的窗口,下一秒又会因为循环语句imshow出来。
提供了cv2.getWindowProperty获取窗口属性,实现关闭窗口时退出程序。
1 # -*- coding: utf-8 -*-
2 '''
3 # cv2 调用摄像头时关闭窗口退出程序
4 # https://blog.csdn.net/qq_44740544/article/details/106184890
5 在使用cv2调用摄像头时,我们常用循环语句完成capture的read和imshow,
6 这使得当点击opencv窗口右上角关闭按钮时,关闭的仅仅是某个时刻的窗口,
7 下一秒又会因为循环语句imshow出来。该博客提供了cv2.getWindowProperty获取窗口属性,实现关闭窗口时退出程序。
8 '''
9 import cv2
10
11 cap = cv2.VideoCapture(0) # 调用笔记本的摄像头
12
13 while cap.isOpened():
14 ret, frame = cap.read()
15 cv2.imshow('windowName', frame)
16
17 # 点击小写字母q 退出程序
18 # print('输入字符:', cv2.waitKey(1))
19
20 # https://blog.csdn.net/Jin1Yang/article/details/125206681
21 # cv.waitKey()是一个键盘绑定函数。其参数是以毫秒为单位的时间。
22 # cv2.waitKey(delay):
23 # delay≤0:一直等待按键;
24 # delay取正整数:等待按键的时间(ms)。
25 # 该函数的返回值:
26 # 等待期间有按键:返回按键的ASCII码(比如:Esc的ASCII码为27);
27 # 等待期间没有按键:返回 值为-1;
28
29 ### 点击指定的字符 ord('q') 或者 对应的ASCII 的字符时,关闭窗口 97 - a / 27 - ESC
30 # ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,
31 # 返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
32 # if cv2.waitKey(1) == ord('q'):
33 # if cv2.waitKey(1) == 27: # Esc的ASCII码为27
34 if cv2.waitKey(1) == 97: # a 的ASCII码为97
35 break
36
37 ### 点击窗口关闭按钮退出程序
38 # 程序正常运行, cv2.WND_PROP_AUTOSIZE 返回值为 1
39 # cv2.getWindowProperty('windowName', cv2.WND_PROP_AUTOSIZE) 为 1.0
40 # print(cv2.getWindowProperty('windowName', cv2.WND_PROP_AUTOSIZE), '\t\t', cv2.WND_PROP_AUTOSIZE)
41 # if cv2.getWindowProperty('windowName', cv2.WND_PROP_AUTOSIZE) < 1:
42 if cv2.getWindowProperty('windowName', 1) < 1:
43 print(cv2.WND_PROP_AUTOSIZE)
44 break
45
46 cap.release()
47 cv2.destroyAllWindows()