|
materials のバックアップ(No.4)
アイコン画像の切り出し方法(プロ向け)
|
| ▼ | ソースコードを開くにはこちら |
import cv2
import os
# ★★★切り出したいスクリーンショット画像のファイル名をここに入力★★★
images = [
"9fdf6d3a961fcfc3d6f40f4f18ab4c49.png",
"50780a22b4e7df1cf89f2f65820f0b5d.png",
"dd762eaf5f43fe53f418367919c68e0b.png",
"e0383bf17f050b7549a50914170db683.png",
"f792a66364f59b71b120f661c421966f.png"
]
for img_path in images:
# 画像読み込み
img = cv2.imread(img_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# エッジ検出
edges = cv2.Canny(gray, 50, 150)
# 輪郭検出
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 出力フォルダ名(画像名から生成)
folder_name = os.path.splitext(os.path.basename(img_path))[0]
os.makedirs(folder_name, exist_ok=True)
i = 0
for c in contours:
x, y, w, h = cv2.boundingRect(c)
# 小さいノイズは除外する
if w > 80 and h > 80:
crop = img[y:y+h, x:x+w]
output_path = os.path.join(folder_name, f"icon_{i}.png")
cv2.imwrite(output_path, crop)
i += 1
|
1. 事前に、Python3を公式サイトからダウンロードして、インストールしておきます
2. 切り出したい画像を一つのフォルダにまとめて置きます
3. `crop.py` を、画像があるフォルダと同じ場所に置きます
4. エクスプローラーのアドレスバーに`cmd`を入力して、コマンドプロンプトを開きます
5. 以下のコマンドを1行ずつ実行して、画像の切り出しを行います
python.exe -m pip install --upgrade pip pip install opencv-python crop.py
6. 画像がフォルダに出力されるので、あとはいい感じに料理して使ってください


こんな感じの、ゲーム画面全体のスクリーンショット(W 1920px H 1080px)を
pyファイルにドラッグアンドドロップすると、
7つ分のバナー画像を等間隔で切り出すスクリプトも作りました。

複数枚の画像丸ごとドラッグアンドドロップにも対応しています。
バナー画像の開始位置が違うと思いますので、
画像を目視確認して、開始位置を微調整できるようにしてあります。

フルHD以外のモニター使ってる人のことは、知りません。
以下のテキストをコピペして、
`weapon_crops.py` という名前でファイルを作成してください。
| ▼ | ソースコードを開くにはこちら |
import cv2
import os
import sys
import numpy as np
# バナー画像一つ目のオフセット
OFFSET_X = 93
OFFSET_Y = 183
# バナー画像の大きさ
CELL_WIDTH = 325
CELL_HEIGHT = 105
# バナー画像二つ目以降の間隔
ROW_GAP = 10
ROW_PITCH = CELL_HEIGHT + ROW_GAP
ROWS = 20
def imread_unicode(path):
data = np.fromfile(path, dtype=np.uint8)
return cv2.imdecode(data, cv2.IMREAD_COLOR)
def adjust_offset_y(img, start_y):
y = start_y
while True:
preview = img.copy()
cv2.line(preview, (0, y), (preview.shape[1], y), (0,0,255), 2)
cv2.putText(
preview,
f"OFFSET_Y = {y} (W/S move 1px A/D move 10px ENTER confirm)",
(20,40),
cv2.FONT_HERSHEY_SIMPLEX,
1,
(0,255,0),
2
)
cv2.imshow("preview", preview)
key = cv2.waitKey(0) & 0xFF
if key == 13: # Enter
break
elif key == ord('w'):
y -= 1
elif key == ord('s'):
y += 1
elif key == ord('a'):
y -= 10
elif key == ord('d'):
y += 10
cv2.destroyAllWindows()
return y
images = sys.argv[1:]
if len(images) == 0:
print("画像をドラッグしてください")
input()
exit()
file_index = 1
for path in images:
print("\n===== 処理開始 =====")
print("ファイル:", path)
img = imread_unicode(path)
if img is None:
print("読み込み失敗")
continue
h, w = img.shape[:2]
OFFSET_Y = adjust_offset_y(img, OFFSET_Y)
print("確定 OFFSET_Y:", OFFSET_Y)
folder = f"output_{file_index:03d}"
os.makedirs(folder, exist_ok=True)
count = 0
for i in range(ROWS):
x1 = OFFSET_X
y1 = OFFSET_Y + i * ROW_PITCH
x2 = x1 + CELL_WIDTH
y2 = y1 + CELL_HEIGHT
if y2 > h:
break
crop = img[y1:y2, x1:x2]
out = os.path.join(folder, f"weapon_{count}.png")
cv2.imwrite(out, crop)
print("保存:", out)
count += 1
print("切り出し数:", count)
file_index += 1
print("\n処理終了")
input()
|
1. 事前に、Python3を公式サイトからダウンロードして、インストールしておきます
2. 切り出したい画像があるスクリーンショットを一つのフォルダにまとめて置きます
3. `weapon_crops.py` を、画像があるフォルダと同じ場所に置きます
4. エクスプローラーのアドレスバーに`cmd`を入力して、コマンドプロンプトを開きます
5. 以下のコマンドを1行ずつ実行して、画像切り出しに必要なライブラリのインストールを行います
python.exe -m pip install --upgrade pip pip install opencv-python
6. 切り抜きたいスクリーンショットたちを、`weapon_crops.py` にドラッグアンドドロップすることで、実行します

赤い線が表示されて、W/Sキーで位置調整が出来ればOKです。
Wキーで上に、Sキーで下にオフセット位置を調整できます。
Enterキーを押せば、その位置で切り抜きを実行します。
7. 「output_001」のような連番フォルダに、切り抜き画像が置かれます。後はいい感じに料理してください

等間隔で7枚切り出すので、特殊ウェポンのように、
バナー画像数が6枚以下の場合、何もない部分も切り抜かれます。
仕様です。許せサスケ…
コメントはありません。 Comments/materials?