とある大学生の勉強メモ

Python, C#, UWP, WPF, 心理実験関連の開発備忘録

Pythonで大きな文字をランダムに出力する方法

目次

前置き

 卒業研究をするにあたってPythonで0から9までの数字をランダムに表示させたかったので、ひとまずGUIを作る事にしました。しかしオブジェクト指向PyQtは書かれており、そもそも手続き的な実験には不向きだと感じました。PyQtの記事はまた出しますが、ユーザーからのインプットがなければオブジェクト指向は動かないので、更新コマンドだけでは中々立ち行かない事が多いと思います。

 データはプログラミングして自動で取りたいけど、大きな数字をどう表示しようか迷いました。GUIは解像度を下げるなどしても小さくて見づらいです。なぜかhtmlのh1以上の大きさにできなかった(僕が探し切れていないとは思いますが。結構頑張ったんだけどなぁ……)。

 という事で大きな数字をランダムに次々と表示したいよ!というオーダーをかなえる為に以下の方法を取りました。

0~9の画像を出力する(笑)

 ディスプレイの定位置に0~9の数字を表示させればもういいんじゃね、と思いその方向でコーディングをしました。以下に全て載せています。

github.com

importするライブラリ環境を整える

 画像出力はcv2を用いました。理由は簡単に画像を消すコマンドが用意されているからです。MatplotlibやPILを利用されている方も多かったですが、結局今回のケースだとcv2が楽でした。

 まず

pip install opencv-python

 AnacondaのCMDから上記コマンドでcv2を入れます。

 pip install cv2ではないので注意。

 表示させるコードは以下の通り。これで0から9までの数字の中からランダムに予め用意した写真を表示してくれます。僕の場合は本コードと同じフォルダにpictureフォルダを用意して、そこに写真データを置きました。そこから呼び出す感じです。

number = random.randint(0,9)

im = cv2.imread("picture/%d.jpg"%number,0)

  cv2.imshow("%d"%number,im)
  cv2.waitKey(1)
  cv2.moveWindow("%d"%number, x, y)

 cv2.waitKey(n)は実は必要なコードで、n[ms]経ってキーボード入力がなければ表示するという意味です。中身を0にすると、キーボードを押さない限り一生何も表示されません。

  cv2.moveWindow("%d"%number, x, y)でディスプレイの好きな所に表示させましょう。

 そしてcv2.destroyAllwindows()によって全ての画像ファイルを消す事が出来ます。


次にペイントででかでかと1のピクチャを作ります。表示させる写真を用意

 名前はプログラムで簡単に呼び出せるようにシンプルにした方が良いと思います。保存はjpgでしました。cv2では他の形式でもいけるとは思うのですが、出来ないと面倒なので前例に従いました。

f:id:amakazeryu:20190204102602j:plain

結び

 今回はGUIを使わずに0~9の画像を出力させる方法を考えました。これから単純実験をする時に画像を使うという手法は結構良い気がします。

 もちろんGUIを使ったやり方も必要になってきますので、オブジェクト指向の勉強もしていかないとですね。

 それではお疲れ様です。