【本地摄像头调用】【按指定键结束】【点击窗口关闭按钮结束】


在使用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()

 






posted @ 2023-02-07 09:21  Bro_Li  阅读(319)  评论(0编辑  收藏  举报