第2回ビネクラ杯のランキングが確定しました!

14-9. 画像差分で間違い探しを解く

やること

イタリアンレストランの間違い探しが子ども向けとは思えないほど難しかったので、画像差分を用いて解いてみます。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 Colaboratory

問題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箇所見つかりました!解散!

タイトルとURLをコピーしました