Opencv 中 waitkey()& 0xFF,“0xFF”的作用解释 | 您所在的位置:网站首页 › 键盘break是什么意思 › Opencv 中 waitkey()& 0xFF,“0xFF”的作用解释 |
这几日学习OpenCV,刚碰到这个表达式时,对于0xFF的作用不太理解,难道下面两个语句还有区别?(Esc的ASCII码为27,即判断是否按下esc键) if cv2.waitkey(30)==27 if cv2.waitkey(30)&0xff==27 疑惑首先&运算即“and”运算。 其次0xFF是16进制数,对应的二进制数为1111 1111。 然后cv2.waitkey(delay)函数 1.若参数delay≤0:表示一直等待按键; 2、若delay取正整数:表示等待按键的时间,比如cv2.waitKey(30),就是等待30(milliseconds);(视频中一帧数据显示(停留)的时间) cv2.waitKey(delay)返回值: 1、等待期间有按键:返回按键的ASCII码(比如:Esc的ASCII码为27,即0001 1011); 2、等待期间没有按键:返回 -1; 我们知道,当按下按键时,waitkey函数的输入值一定是一个正整数。任何一个正整数,与1111 1111做&运算,其结果必然是他本身(因为正数的补码等于原码),例 0001 1011 1111 1111 &运算结果为:0001 1011 那么这个&0xff到底有什么用呢? 解释查阅资料我才知道,原来系统中按键对应的ASCII码值并不一定仅仅只有8位,同一按键对应的ASCII并不一定相同(但是后8位一定相同) 为什么会有这个差别?是系统为了区别不同情况下的同一按键。 比如说“q”这个按键 当小键盘数字键“NumLock”激活时,“q”对应的ASCII值为100000000000001100011 。 而其他情况下,对应的ASCII值为01100011。 相信你也注意到了,它们的后8位相同,其他按键也是如此。 为了避免这种情况,引用&0xff,正是为了只取按键对应的ASCII值后8位来排除不同按键的干扰进行判断按键是什么。 |
CopyRight 2018-2019 实验室设备网 版权所有 |