ポケモンSV レイド結晶のないMAP画像を用意したい
DLC前編が配信され、自動レイド用に新ポケモンのシルエット画像が必要になりました。
手作業で集めるのがめんどくさい為、自動で画像保存するプログラムを組んだのはいいが、結晶の出現率が悪い。
差分検出で結晶出現率を調べるために、ポケモンのアイコンや、結晶のアイコンのないMAP画像が必要になったので生成するプログラムを書きました。
準備
このような画像を大量に用意します
自動レイドプログラムの時間変更後に、日付変更→MAP表示→トリミング→グレースケール化→画像保存するコードを追記して集めました
とりあえず100枚用意しました
コード
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
from PIL import Image
import numpy as np
import collections
def open_image(path: str) -> Image.Image:
image = Image.open(f"MapImageProcces\image\{path}")
return image
map_images = os.listdir("MapImageProcces\image")
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):
image_array = np.array(open_image(path))
for index, y in enumerate(image_array):
for column, x in enumerate(y):
array[index][column].append(x)
print(f"{num+1} / {len(map_images)}")
for index, y in enumerate(array):
for column, x in enumerate(y):
c = collections.Counter(x)
image_array[index][column] = c.most_common()[0][0]
print(f"{index+1}/{image.size[1]}")
ary = np.array(image_array)
new_image = Image.fromarray(ary)
new_image.save(f"MapImageProcces/results.png")
ゴリ押しです。もっと良い方法があるはず
ピクセル毎の、最多出現数の値で新しい画像を生成しているだけです
結果
差分検出用のテンプレートとしては実用に耐えうるものができたのではないかと
後書き
すべての結晶を倒して、すべての大量発生を潰して回れば同じものが出来ることに完成してから気づきました