週1でお世話になるサイゼリア
好きなメニューは
青豆の温サラダ
これがあるから
サイゼリアは止められない!!!!
そんなサイゼリアさんで
いつも話題に上がるのが
サイゼリアの間違い探し
難しすぎ問題
普段そんなに
間違い探しとかに気を取られないが
注文したメニューが来るまでは
考えちゃいますよねーー
そんな間違い探しを
プログラムの力で解いてみたい
という挑戦です。
動画はこちら
まずは
元の画像をサイゼリアさんの公式ページから
お借りしてきました。
間違い探し
これが間違い探しの問題の画像です。
これは1200 x 578ピクセルのサイズでした。
これを
左右を同じサイズで切り取って
そのピクセルを比較すれば、
間違い探しの答えが浮かび上がるのではないか?
そう考えたわけです。
まずは
左右二つの画像に切り分けます。
Pythonでは画像を取り扱うライブラリもあるので
それが使えます。
まずはライブラリのインポート
描画用にmatplotlibを使います。
matplotlibの画像を描画させるのに
numpyのarrayでなければならないので
numpyも読み込み
matplotlibを
インラインで表示させたいので指定します。
画像をとりこんだあとは
左右に切り分けます。
左右に余白があり
マージンを取って取り込みます。
ピクセルのRGB値を取得して
新たな画像として生成します。
左側
右側
次に
この画像のピクセル同士を比較します。
この問題の左右がコピーされていて
ほぼ同じものであったなら
そのピクセルの違う部分が答えなのではないかと
左右のピクセルを比較した結果
違っていればそのピクセルを
合っていれば黒で答えを作りました。
結果は・・・・
なんか
いろいろ写っちゃってるやないかーーい
左右は全くの同じではなく
少し違いがあるか、ズレが生じているようで
単純なピクセルの比較では
答えの部分だけを出すのは難しいようです。
一応、違いが大きいところは
色が付いているので
着目すれば10個の答えは出そうですが
うまく、結果だけを出す
アルゴリズムを考えないと
くっきりした答えには
たどり着けないですねーーー
うーん
画像は奥が深い
ということで
皆さん
サイゼでガッツリ食べながら
この問題を解いてみましょう(笑)
好きなメニューは
青豆の温サラダ
これがあるから
サイゼリアは止められない!!!!
そんなサイゼリアさんで
いつも話題に上がるのが
サイゼリアの間違い探し
難しすぎ問題
普段そんなに
間違い探しとかに気を取られないが
注文したメニューが来るまでは
考えちゃいますよねーー
そんな間違い探しを
プログラムの力で解いてみたい
という挑戦です。
動画はこちら
まずは
元の画像をサイゼリアさんの公式ページから
お借りしてきました。
間違い探し
これが間違い探しの問題の画像です。
これは1200 x 578ピクセルのサイズでした。
これを
左右を同じサイズで切り取って
そのピクセルを比較すれば、
間違い探しの答えが浮かび上がるのではないか?
そう考えたわけです。
まずは
左右二つの画像に切り分けます。
Pythonでは画像を取り扱うライブラリもあるので
それが使えます。
まずはライブラリのインポート
from PIL import Image import matplotlib.pyplot as plt import numpy as np %matplotlib inline im = Image.open('saize201810.png') rgb_im = im.convert('RGB’)PILというライブラリで画像を取り込み
描画用にmatplotlibを使います。
matplotlibの画像を描画させるのに
numpyのarrayでなければならないので
numpyも読み込み
matplotlibを
インラインで表示させたいので指定します。
画像をとりこんだあとは
左右に切り分けます。
im1 = Image.new('RGB',(572,578)) im2 = Image.new('RGB',(572,578)) for x in range(0,572): for y in range(578): r,g,b = rgb_im.getpixel((x+28,y)) im1.putpixel((x,y),(r,g,b)) for x in range(601,1173): for y in range(578): r,g,b = rgb_im.getpixel((x,y)) im2.putpixel((x-601,y),(r,g,b)) plt.imshow(np.array(im1)) plt.imshow(np.array(im2))
左右に余白があり
マージンを取って取り込みます。
ピクセルのRGB値を取得して
新たな画像として生成します。
左側
右側
次に
この画像のピクセル同士を比較します。
この問題の左右がコピーされていて
ほぼ同じものであったなら
そのピクセルの違う部分が答えなのではないかと
im3 = Image.new('RGB',(572,578)) for x in range(572): for y in range(578): r1,g1,b1 = im1.getpixel((x,y)) r2,g2,b2 = im2.getpixel((x,y)) if r1!=r2 or g1!=g1 or b1!=b2: im3.putpixel((x,y),(r1,g1,b1)) else: im3.putpixel((x,y),(0,0,0)) plt.imshow(np.array(im3))
左右のピクセルを比較した結果
違っていればそのピクセルを
合っていれば黒で答えを作りました。
結果は・・・・
なんか
いろいろ写っちゃってるやないかーーい
左右は全くの同じではなく
少し違いがあるか、ズレが生じているようで
単純なピクセルの比較では
答えの部分だけを出すのは難しいようです。
一応、違いが大きいところは
色が付いているので
着目すれば10個の答えは出そうですが
うまく、結果だけを出す
アルゴリズムを考えないと
くっきりした答えには
たどり着けないですねーーー
うーん
画像は奥が深い
ということで
皆さん
サイゼでガッツリ食べながら
この問題を解いてみましょう(笑)