LoginSignup
0
0

More than 1 year has passed since last update.

python:opencvでピクトグラム当てゲーム

Posted at

Opencvで画像を繰り返しランダムで表示させる

オリンピックでピクトグラムを知った。
見てみると、何となくわかるけど、ちょっと微妙にわからない、、、
なので、「ピクトグラムが何を表しているかゲーム」を作ることでピクトグラムとOpencvの理解を深めてみました。
※ピクトグラムは下記URLで無料公開されているものを使用。

ゲーム内容

①画像の表示
②キーボードの「E」を押したら終了
③「N」を押したら画像が表示される
④表示後、「A」を押したら答えが表示される
⑤最初に戻って、「E」を押すまで繰り返す


画像

①最初の画面、真っ白。
 画面の上に「E」を押すと終了、「N」を押すと次の画像が表示と表した。
screen.png
②ピクトグラム画像の表示、「A」を押すと答えが右上に表示される
screen 1.png
③答えが表示された状態(右上)
 「N」を押せば次の画像が表示、「E」を押すと終了

screen 2.png

コード内容

コード全体
#ライブラリのimport
import cv2
import glob
import random
import numpy as np

#######################################################################################
#関数の定義
def Text_in(gazou,Word1,Word2,xy1,xy2):
    cv2.putText(gazou,Word1,xy1,cv2.FONT_HERSHEY_COMPLEX,1,(0,0,0),thickness=1)
    cv2.putText(gazou,Word2,xy2,cv2.FONT_HERSHEY_COMPLEX,1,(0,0,0),thickness=1)

def Text_out(gazou,Word1,Word2,xy1,xy2):
    cv2.putText(gazou,Word1,xy1,cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),thickness=1)
    cv2.putText(gazou,Word2,xy2,cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),thickness=1)

#######################################################################################
#使用する言葉の定義
keyword_end = "End : push key ' E ' "
keyword_next = "Next : push key ' N ' "
keyword_ans = "Answser : push key 'A' "
keyword_any = "No answser : push any key"

#######################################################################################
#参照する画像のパス
Pics = glob.glob("EXPERIENCE_JAPAN_PICTOGRAM/png/*")

#######################################################################################
#はじめに背景が真っ白な画像を表示
gazou = cv2.imread(Pics[0],1)
H,W = gazou.shape[:2]
canvas = np.ones((H,W,3))*255
#キーボードの「N」を押したら画像を表示、「E」を押したら終了としている
Text_in(canvas,keyword_end,keyword_next,(10,50),(500,50))
cv2.imshow("image",canvas)

#######################################################################################
while(1):
    #キーボードの入力
    key = cv2.waitKey(0)

    #「E」を押したら終了
    if key == ord("e"):
        break

    #「N」を押したら新しい画像を表示
    elif key == ord("n"):

        #画像をランダムで表示
        Rnd = random.randint(0,len(Pics))
        name = Pics[Rnd].split("/")[-1].split(".")[0].split("_")[1]
        gazou = cv2.imread(Pics[Rnd],1)

        #「E」と「N」の言葉を白文字で塗りつぶし(見えなくして)、
        #「A」を押すと画像が何を表しているか表示させる
        #「A」以外を押すと答えを表示させない、と画面に表示する
        Text_out(gazou,keyword_end,keyword_next,(10,50),(500,50))
        Text_in(gazou,keyword_ans,keyword_any,(10,50),(500,50))
        cv2.imshow('image',gazou)

        #キーボードの入力
        key = cv2.waitKey(0)
        #答えを表示するかどうかの言葉を白文字で塗りつぶす
        Text_out(gazou,keyword_ans,keyword_any,(10,50),(500,50))
        if key == ord("a"):
            #「A」を押したので、画像の答えを表示する
            #繰り返すため、「N」と「E」の言葉を再度表示させる
            Text_in(gazou,keyword_end,keyword_next,(10,50),(500,50))
            Text_in(gazou,name,"",(1200,50),(0,0))
            cv2.imshow('image',gazou)
        else:
            #繰り返すため、「N」と「E」の言葉を再度表示させる
            Text_in(gazou,keyword_end,keyword_next,(10,50),(500,50))
            cv2.imshow('image',gazou)
    continue

cv2.destroyAllWindows()

所感

実は資格勉強に疲れたので息抜き感覚で作りました。
ピクトグラム画像が数多くあり、画像見るだけで楽しめたので思わずプログラミングに没頭してしまいました。
資格勉強時間は減ったけど、勉強したのには変わりないので、ヨシ!!
皆様もページ上のリンクから見てみてください。

0
0
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
0
0