[PYTHON] cv2.waitKey (1)의 0xFF는 무엇입니까?
PYTHONcv2.waitKey (1)의 0xFF는 무엇입니까?
0xFF가 다음 코드 스 니펫에서 다루는 내용을 이해하려고 노력 중입니다.
if cv2.waitKey(0) & 0xFF == ord('q'):
break
어떤 아이디어?
해결법
-
==============================
1.0xFF는 2 진수로 11111111 인 16 진수 상수입니다. 이 상수와 비트 AND (&)를 사용하면 원본의 마지막 8 비트 (이 경우 cv2.waitKey (0)가 무엇이든간에) 만 남습니다.
0xFF는 2 진수로 11111111 인 16 진수 상수입니다. 이 상수와 비트 AND (&)를 사용하면 원본의 마지막 8 비트 (이 경우 cv2.waitKey (0)가 무엇이든간에) 만 남습니다.
-
==============================
2.NumLock이 활성화되어 있다면 ord ( 'q')가 다른 숫자를 반환 할 수 있다는 점도 중요합니다 (아마도 다른 키에서도 발생하고있을 수 있습니다). 예를 들어, c를 누르면 코드는 다음과 같습니다.
NumLock이 활성화되어 있다면 ord ( 'q')가 다른 숫자를 반환 할 수 있다는 점도 중요합니다 (아마도 다른 키에서도 발생하고있을 수 있습니다). 예를 들어, c를 누르면 코드는 다음과 같습니다.
key = cv2.waitKey(10) print(key)
보고
1048675 when NumLock is activated 99 otherwise
이 2 개의 수를 2 진수로 변환하면 다음을 볼 수 있습니다.
1048675 = 100000000000001100011 99 = 1100011
보시다시피, 마지막 바이트는 동일합니다. 그런 다음 NumLock의 상태 때문에 나머지가 발생하기 때문에이 마지막 바이트 만 가져와야합니다. 따라서 다음을 수행합니다.
key = cv2.waitKey(33) & 0b11111111 # 0b11111111 is equivalent to 0xFF
열쇠의 가치는 동일하게 유지 될 것이고 이제 우리는 당신의 질문과 같은 우리가 원하는 어떤 열쇠와도 비교할 수 있습니다.
if key == ord('q'):
-
==============================
3.cv2.waitKey ()는 32 비트 정수 값을 반환합니다 (플랫폼에 따라 다를 수 있음). 키 입력은 ASCII로 8 비트 정수 값입니다. 따라서이 8 비트에만 관심을 갖고 다른 모든 비트는 0이되기를 원합니다. 다음과 같이 구현할 수 있습니다.
cv2.waitKey ()는 32 비트 정수 값을 반환합니다 (플랫폼에 따라 다를 수 있음). 키 입력은 ASCII로 8 비트 정수 값입니다. 따라서이 8 비트에만 관심을 갖고 다른 모든 비트는 0이되기를 원합니다. 다음과 같이 구현할 수 있습니다.
cv2.waitKey(0) & 0xFF
-
==============================
4.사실이 경우에는 0xFF가 필요하지 않습니다. cv2.waitkey (0) == ord (q)를 수행했다면 똑같이 작동합니다. 0xFF는 시퀀스의 마지막 8 비트를 마스크하는 데 사용되며 키보드 문자의 ord ()는 255보다 클 수 없습니다.이 ASCII 테이블을 참조하여 키보드 문자의 숫자 값을 찾을 수 있습니다.
사실이 경우에는 0xFF가 필요하지 않습니다. cv2.waitkey (0) == ord (q)를 수행했다면 똑같이 작동합니다. 0xFF는 시퀀스의 마지막 8 비트를 마스크하는 데 사용되며 키보드 문자의 ord ()는 255보다 클 수 없습니다.이 ASCII 테이블을 참조하여 키보드 문자의 숫자 값을 찾을 수 있습니다.
-
==============================
5.ord (c)는 인수가 유니 코드 객체 일 때 문자 (c)의 유니 코드 코드 포인트를 나타내는 정수 또는 인수가 8 비트 문자열 인 경우 바이트 값을 반환합니다.
ord (c)는 인수가 유니 코드 객체 일 때 문자 (c)의 유니 코드 코드 포인트를 나타내는 정수 또는 인수가 8 비트 문자열 인 경우 바이트 값을 반환합니다.
64 비트 시스템의 경우 cv2.waitKey (0)의 값은 0xFF 16 진수 상수 (이진 문자열 11111111의 표현)와 비트 AND (&)하여 마지막 8 비트가됩니다. 따라서 ord (c)로 eqality를 확인하십시오.
-
==============================
6.이 코드에서,
이 코드에서,
if cv2.waitKey(0) & 0xFF == ord('q'): break
입력이 없으면 waitKey (0) 함수는 -1을 반환합니다. 이벤트가 발생하자마자 즉, 버튼을 누르면 32 비트 정수가 반환됩니다.
이 시나리오의 0xFF는 이진수 11111111을 8 비트 바이너리로 나타냅니다. 우리는 AND와 waitKey (0) ~ 0xFF 문자를 나타내는 데 8 비트 만 필요하기 때문입니다. 결과적으로 255보다 작은 정수가 얻어집니다.
ord (char)는 다시 최대 255가 될 문자의 ASCII 값을 반환합니다.
따라서 정수를 ord (char) 값과 비교하여 키 누름 이벤트를 확인하고 루프를 중단 할 수 있습니다.
from https://stackoverflow.com/questions/35372700/whats-0xff-for-in-cv2-waitkey1 by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] tkinter와 Tkinter의 차이점 (0) | 2018.11.14 |
---|---|
[PYTHON] Windows 용 psycopg2를 사용하여 어디서 바이너리 달걀을 다운로드 할 수 있습니까? (0) | 2018.11.13 |
[PYTHON] 방향을 따르는 점들의 집합을 그룹화하는 알고리즘 (0) | 2018.11.13 |
[PYTHON] 팬더 데이터 프레임에서 2 열의 값을 단일 열로 합치십시오. (0) | 2018.11.13 |
[PYTHON] 파이썬 : 객체가 명명 된 튜플의 인스턴스인지 확인하는 방법은 무엇입니까? (0) | 2018.11.13 |