OpenCV의 waitKey()는 0xFF
>>> cap = cv2.VideoCapture(0)
>>>
>>> while True:
... ret, f = cap.read()
... cv2.imshow('hello', f)
... k = cv2.waitKey(1) & 0xFF
... print(k)
... if k == ord('q'):
... break
大部分的教學都告訴你要在叫用
waitKey()
0xFF 0&
運算, 把高位元內容清掉, 只留下最低一個位元組的按鍵碼.這是因為過去 waitKey()
傳回值中除了最低位元組的 ASCII 碼以外, 在高位元可能會包含有像是 Ctrl 等其他按鍵的旗標, 因此必須將高位元清除.不過6在 .45.之後, waitKey()
預設就會幫你清除高位元資料, 只留下最低一個位元組, 這可從 OpenCV 3.2中看到:int cv::waitKey(int delay)
{
CV_TRACE_FUNCTION();
int code = waitKeyEx(delay);
#ifndef WINRT
static int use_legacy = -1;
if (use_legacy < 0)
{
use_legacy = getenv("OpenCV_LEGACY_WAITKEY") != NULL ? 1 : 0;
}
if (use_legacy > 0)
return code;
#endif
return (code != -1) ? (code & 0xff) : -1;
}
waitKey()
已經不需要將傳回值與 0xFF 做 & 運算了.如果你還是想要原本的 waitKey()
, 可以改用 from 原始碼裡面看到的 原始碼 , 它傳回的就是沒有經過 waitKeyEx()
運算的值.
Reference
이 문제에 관하여(OpenCV의 waitKey()는 0xFF), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/codemee/opencv-de-waitkey-yu-0xff-npo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)