import os
import cv2
def split_unique_chess_pieces(image_path, output_dir="templates"):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# ВАЖНО: cv2.IMREAD_UNCHANGED сохраняет прозрачный фон (альфа-канал)
img = cv2.imread(image_path, cv2.IMREAD_UNCHANGED)
if img is None:
print(f"Ошибка: Не удалось загрузить файл '{image_path}'!")
return
height, width = img.shape[:2]
# Вычисляем точный размер одной клетки (доска 8х8)
square_h = height / 8.0
square_w = width / 8.0
# Координаты для 12 уникальных фигур (строка, колонка)
unique_positions = {
"black_rook": (0, 0),
"black_knight": (0, 1),
"black_bishop": (0, 2),
"black_queen": (0, 3),
"black_king": (0, 4),
"black_pawn": (1, 0),
"white_pawn": (6, 0),
"white_rook": (7, 0),
"white_knight": (7, 1),
"white_bishop": (7, 2),
"white_queen": (7, 3),
"white_king": (7, 4),
}
print("Нарезаем фигуры с сохранением прозрачности...")
for name, (row, col) in unique_positions.items():
y1 = int(row * square_h)
y2 = int((row + 1) * square_h)
x1 = int(col * square_w)
x2 = int((col + 1) * square_w)
# Вырезаем область
piece_crop = img[y1:y2, x1:x2]
# Сохраняем в PNG
save_path = os.path.join(output_dir, f"{name}.png")
cv2.imwrite(save_path, piece_crop)
print(f"Сохранено: {save_path}")
if __name__ == "__main__":
IMAGE_PATH = "figure.png"
split_unique_chess_pieces(IMAGE_PATH)