読者です 読者をやめる 読者になる 読者になる

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コードにすることで、入力文字を正しく判定できるようにしているはず……

はずなのです。

ちゃんと理解してないから、気持ち悪いわ……