OpenCV의 waitKey()는 0xFF

4696 단어 pythonopencv
OpenCV를 사용하는 사람은 다음과 같은 작업을 수행할 수 있습니다.

>>> 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()運算的值.

좋은 웹페이지 즐겨찾기