LoginSignup
2
4

More than 1 year has passed since last update.

絵をシャッフルしたクイズが好きなので、再現してみる

Posted at

はじめに

最近あまりにも暑すぎて、家にいることが多いですよね。
となると、家で時間をつぶす道具が必要となります。

時間つぶしの道具といえば、発想系クイズ

発想系クイズは、1問1問あたり解くのに時間がかかり
人を選ばないので楽しいです。

なので、低コストでたくさん作ることが出来るクイズを作りましょう。

 用意するものと手順

987.jpg

ここによくある漢字があります、こいつをバラバラにしていきましょう。
まずは入口です。

import cv2
import numpy as np
import random
from itertools import chain

PIC = 20
raw = cv2.imread("S20160410022001A_000.png",1)
test = cv2.resize(raw , (int(raw.shape[0]*PIC), int(raw.shape[1]*PIC)))

PICで分割する数を決めます。
今回は20なので、20×20に分割されます。

ans = np.zeros(test.shape)
NUM= PIC**2
new_pic = list(range(NUM))
random.shuffle(new_pic)

今回の要となる部分はここです。

ここで20×20のランダムにちりばめられたリストを作ることによって、バラバラにすることを実現させています。
イメージとしては15パズルとかをイメージしていただけると助かります。

image.png

この数字が

image.png

こうなっているとバラバラですよね。
これを再現していきましょう。

for j in range(NUM):
    ax = (j // PIC)
    hori = ((j)% PIC)
    r_ax = (new_pic[j] // PIC)
    r_hori = ((new_pic[j])% PIC)
    ans[int(r_ax*test.shape[0]//PIC):(r_ax+1)*test.shape[0]//PIC,r_hori*test.shape[1]//PIC:(r_hori+1)*test.shape[1]//PIC] = \
    test[ax*test.shape[0]//PIC:(ax+1)*test.shape[0]//PIC,hori*test.shape[1]//PIC:(hori+1)*test.shape[1]//PIC]

商とあまりで座標決めすることによって
このように並び替えることが出来ます。

img = cv2.resize(ans , (raw.shape[1],raw.shape[0]))
cv2.imwrite("barabara.jpg",img.astype(int))

あとは、サイズをもとに戻して(1回やらかした)保存して終了です。

barabara.jpg

先ほどの密もバラバラですね。疎ですね。
よかった。

あとはPICの数を弄って難易度を調整して遊びましょう。

 最後に

こうすることによって、簡単にクイズを作ることが出来ます。
皆さんも暇なときに作って遊びましょう!

もっと楽しくできる方法とかあれば教えていただけると幸いです。
実装して遊びます!

2
4
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
2
4