やること
イタリアンレストランの間違い探しが子ども向けとは思えないほど難しかったので、画像差分を用いて解いてみます。Pythonならゆったり書いても40行ちょっとで済みます。
実行環境
WinPython3.6をおすすめしています。
WinPython - Browse /WinPython_3.6/3.6.7.0 at SourceForge.net
Portable Scientific Python 2/3 32/64bit Distribution for Windows
Google Colaboratoryが利用可能です。
Google Colab
問題1
羊キャラが消えてラム肉が登場したことで界隈がざわついたこちらの問題です。
pip
必要なパッケージをインストールします。
pip install opencv-python
pip install opencv-contrib-python
pip install matplotlib
ソースコード
とっても短いです。
import cv2
import matplotlib.pyplot as plt
#=============================
# パラメータ
#=============================
#画像1
img_path_1 = '14-16_1.png'
#画像2
img_path_2 = '14-16_2.png'
#=============================
# 画像表示関数
#=============================
def show(img):
plt.figure(figsize=(10, 10))
plt.imshow(img, vmin = 0, vmax = 255)
plt.show()
plt.close()
#=============================
# 画像読み込み
#=============================
img_1 = cv2.imread(img_path_1)
img_1 = cv2.cvtColor(img_1, cv2.COLOR_BGR2RGB)
img_2 = cv2.imread(img_path_2)
img_2 = cv2.cvtColor(img_2, cv2.COLOR_BGR2RGB)
#=============================
# 画像の差分
#=============================
#準備
fgbg = cv2.bgsegm.createBackgroundSubtractorMOG(history=2)
#差分マスクの計算
fgmask = fgbg.apply(img_1)
fgmask = fgbg.apply(img_2)
show(fgmask)
#画像1を暗くして差分マスクを重ねる
img_1 = img_1 // 4
img_1[fgmask==255] = (255, 0, 0)
show(img_1)
10箇所見つかりました!そこ変わってるんかい。。。
問題2
こちらの問題もやってみます。
結果
こちらも10箇所見つかりました!解散!
さいごに
これでもうサイゼリヤは怖くないです。
サイゼリ「ア」かサイゼリ「ヤ」か分からなくなってしまう人は、ドリ「ア」の逆!と覚えてください。
なおこれで私は「ドリア?ドリヤ?」となって無事死亡しました。