PythonでOpenCVのwaitKey(1)の戻り値がなんか数値になっちゃう時の対処法
とりあえず、&0xffをつけて、ASCIIコードで判断しよう
64bit + utf-8の環境なら起こる現象みたい。(つまり、最近のほとんどのlinux環境なら起こるのね)
なんか、突発的に書き捨てるpythonプログラムで、OpenCV3系統を使ってると、いつもはまるので、備忘録的にメモ。
期待した動きをしないプログラム
例えば、こんなプログラム。
import cv2 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() cv2.imshow('test',frame) key = cv2.waitKey(1) if key == 'q': cv2.destroyAllWindows() exit()
期待としては、ビデオデバイス0のキャプチャ画像を画面に表示している画面で、qが入力されたら終了、なんですが。
効かない。
全く効かない。
期待した動きをするプログラム
こんな風にして逃げたらいいみたい。
import cv2 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() cv2.imshow('test',frame) key = cv2.waitKey(1)&0xff if key == ord('q'): cv2.destroyAllWindows() exit()
これでqを押したら終了するはず。
waitKeyの戻り値に0xffをつけることで、ASCIIコードにしておいて、
評価したい文字をord()を使ってASCIIコードにすることで、入力文字を正しく判定できるようにしているはず……
はずなのです。
ちゃんと理解してないから、気持ち悪いわ……