【本地摄像头调用】【按指定键结束】【点击窗口关闭按钮结束】
在使用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()