2016-04-07 5 views
0

私はまだプログラミングの初心者ですが、この質問があまりにも些細なものであれば私を諦めてください。私はこのコードを持っているとしましょう。同時に、qキーが押された場合、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 

だから、私の理解から、インスタンスのフレームが示されている(「ビデオ」ウィンドウで)を、ループが壊れてしまう。しかし、私は実際にif cv2.waitKey(1) & 0xFF == ord('q')ラインがどのように動作するのか分かりません。

ANDビット単位の操作で、2つの入力が両方とも1の場合にのみ出力が1であることはわかりますが、それはすべてそれに当てはまります。だから、私は本当に何が起こっているのか正確に知りたい。

また、実際には0xFF == ord('q')とは何ですか?

+0

DIOSerent OSは 'waitKey'に対して異なる戻り値を持ちますが、2 LSBは同じになります。 – Miki

答えて

1

Pythonの演算子の優先順位は、私たちに与えます:バイナリで

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

を、これは次のようになります。だから、

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

、それは同じだ場合何これが行うことは、低い8結果cv2.waitKeyのビットおよびテストを選択しています'q'のASCII値であるord('q')に設定します。