LoginSignup
8
6

More than 5 years have passed since last update.

【ゲーム】cv2.waitKeyの学習用アプリを作って遊んでみた♪

Posted at

ゲームっぽく、waitKeyのキー入力と数字(キーコード)の関係を理解するためのアプリを作ってみた。

わかったこと

①waitKeyの使い方
②文字をランダムに出力する
③文字入力input文との併用ができない
④k == 27、k == ord('s')、そしてchr(k) == 'q'で判定

①waitKeyの使い方

参考に詳細な説明があるが、そのまとめアプリから出発することとする。
【参考】
OpenCV-Python Tutorials 1 documentation » OpenCV-Pythonチュートリアル » OpenCVのGUI機能 »

import numpy as np
import cv2

img = cv2.imread('messi5.jpg',0)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('messigray.png',img)
    cv2.destroyAllWindows()

②文字をランダムに出力する

これにゲーム性を持たせるように以下のように変更した。
まず、文字をランダムに出力するには、以下の参考のとおり
【参考】
Random string generation with upper case letters and digits in Python

import numpy as np
import cv2
import random

img = cv2.imread('messi5.jpg',0)
cv2.imshow('image',img)
while True:
    rl = random.choice("abcdefghijklmnopqrstuvwxyz1234567890")
    print(rl,'に対応するwaitKeyの数字は')

③文字入力input文との併用ができない

これはどうもできない・・・らしい

以下の入力を入れようとしたが、どうも画像が応答なしになってしまう??

print('対応する数字を入力してください。')
your_num = input('>>> ')
print(your_num)

④k == 27、k == ord('s')、そしてchr(k) == 'q'で判定

前の二つの方法はよく見るけど、最後のchr(k) == 'q'で判定はあまり見ないけど、出来ました。
【参考】
How to use OpenCV waitKey in Python
なお、保存される画像のファイルサイズはかなり異なります。

    k = cv2.waitKey(0)&0xff
    if k == 27:         # wait for ESC key to exit
        cv2.destroyAllWindows()
        break
    elif k == ord('s'): # wait for 's' key to save and exit
        cv2.imwrite('messigray.png',img)
        cv2.destroyAllWindows()
        break
    elif chr(k) == 'q': # wait for 'q' key to save and exit
        cv2.imwrite('messigray.jpg',img)
        cv2.destroyAllWindows()
        break

出力は以下のとおりで納めました。

    else:
        print('あなたの入力したキー入力は ',chr(k),'、正解は ',rl)
        print('あなたの入力したキーの変換は ',k,'、正解は ',ord(rl))

まとめ

・cv2.waitKeyの学習用アプリを作って遊んでみた
以下を理解した
・②文字をランダムに出力する
・③文字入力input文との併用ができない
・④k == 27、k == ord('s')、そしてchr(k) == 'q'で判定

おまけ

どうしても気になったので、ESCキーのchrを見てみました。
結果は、
「ESCキーは  、数字は  27」
だそうです。 「」は標準出力では、「・」に見えます。
【参考】
highguiのキーコード一覧

import numpy as np
import cv2
import random

img = cv2.imread('messi5.jpg',0)
cv2.imshow('image',img)
while True:
    rl = random.choice("abcdefghijklmnopqrstuvwxyz1234567890")
    print(rl,'に対応するwaitKeyの数字は')
    k = cv2.waitKey(0)&0xff
    if k == 27:         # wait for ESC key to exit
        cv2.destroyAllWindows()
        print('ESCキーは ',chr(k),'、数字は ',k)
        break
    elif k == ord('s'): # wait for 's' key to save and exit
        cv2.imwrite('messigray.png',img)
        cv2.destroyAllWindows()
        break
    elif chr(k) == 'q': # wait for 'q' key to save and exit
        cv2.imwrite('messigray.jpg',img)
        cv2.destroyAllWindows()
        break
    else:
        print('あなたの入力したキー入力は ',chr(k),'、正解は ',rl)
        print('あなたの入力したキーの変換は ',k,'、正解は ',ord(rl))
8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6