Загрузка данных


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)

    # Загружаем изображение
    img = cv2.imread(image_path)
    if img is None:
        print(f"Ошибка: Не удалось загрузить файл '{image_path}'!")
        print("Проверьте имя файла и путь к нему.")
        return

    height, width, _ = img.shape

    # Вычисляем точный размер одной клетки (доска 8х8)
    square_h = height / 8.0
    square_w = width / 8.0

    # Словарь координат для 12 уникальных фигур (строка, колонка)
    # Белые фигуры находятся снизу (строки 6 и 7)
    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]

        # Сохраняем в файл
        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)