ポケモンSV レイド結晶の出やすい箇所を調べたい
前回の続きです。
前回差分検出用のテンプレート画像の生成に成功したので、結晶出現率を調べたいと思います。
前回テンプレート画像作成に使用した画像をそのまま使用します。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
from PIL import Image, ImageDraw
import numpy as np
import collections
anchor = "center"
def open_image(path: str) -> Image.Image:
if anchor in path:
image = Image.open(f"MapImageProcces/image/{path}")
else:
image = Image.open(f"MapImageProcces/image/{anchor}/{path}")
return image
template = np.array(open_image(f"{anchor}_result.png"))
map_images = os.listdir(f"MapImageProcces/image/{anchor}")
image = open_image(map_images[0])
array = [[[] for i in range(image.size[0])] for i in range(image.size[1])]
for num, path in enumerate(map_images):
diff = template.astype(np.int16) - np.array(open_image(path)).astype(np.int16)
diff = ((diff + 256) // 2)
diff = diff.astype(np.uint8)
threshold = 128
threshold_num = 10
diff = np.where(diff >= threshold + threshold_num, 255, np.where(diff <= threshold - threshold_num, 255, 0))
for index, y in enumerate(diff):
for column, x in enumerate(y):
if x != 0:
array[index][column].append(x)
max_x = 0
for index, y in enumerate(array):
for column, x in enumerate(y):
if max_x < len(x):
max_x = len(x)
for index, y in enumerate(array):
for column, x in enumerate(y):
ratio = (len(x) / max_x) * 100
color = (ratio * 255) / 100
array[index][column] = int(color)
new_image = Image.fromarray(np.array(array).astype(np.uint8))
new_image.save(f"MapImageProcces/image/{anchor}_diff_result.png")
print(max_x)
テンプレート画像との濃度が+-10以上の箇所を白、それ以外を黒にした配列を生成します。
各画像から生成した配列を3次元配列でまとめて、白の最多出現数を調べます。
各ピクセルの白の出現数 / 最多出現数 * 100を白色の濃さとして新しい画像を生成します。
それっぽい画像が生成されました。
結果の画像をマスクにして赤単色の画像を合成したもの。
赤が濃いほど出現率が高くなります。
比較用にパルデアで出力したもの。
こう見るとキタカミは出現場所の候補が多く、分散してますね。
この記事が気に入ったらサポートをしてみませんか?