2016-04-07 21 views
0

我仍然是編程初學者,如果這個問題太瑣碎了,請給我打電話。讓說,我有這樣的代碼:Python和OpenCV - 我如何理解這個按位運算符?

camera = cv2.VideoCapture('path_to_video_file') 
while True: 
    #reading frames of video 
    ret, frame = camera.read() 
    cv2.imshow("Video", frame) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

所以,從我的理解,在實例時顯示的畫面(在「視頻」窗口),如果在同一時間,q鍵被按下時,循環會中斷。但我不太瞭解if cv2.waitKey(1) & 0xFF == ord('q')系列的工作原理。

我知道這是一個AND按位操作,其中輸出爲1時,只有兩個輸入都是1時也是如此。所以,我真的想知道到底發生了什麼。

而且,實際上0xFF == ord('q')的含義是什麼?

+0

不同的操作系統對於'waitKey'將有不同​​的返回值,但是2個LSB將是相同的。 – Miki

回答

1

Python的運算符優先級給我們:

(cv2.waitKey(1) & 0xFF) == ord('q') 

在二進制,這就是:

(cv2.waitKey(1) & 0b11111111) == ord('q') 

那麼,這是什麼做的是選擇的結果cv2.waitKey和測試的低8位,如果這就是平等到ord('q'),這是'q'的ASCII值。