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


import os
import cv2

def extract_chess_pieces(image_path="Start_board.png", output_folder="extracted_pieces"):
    # 1. Создаем папку для сохранения вырезанных фигур
    os.makedirs(output_folder, exist_ok=True)

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

    img_h, img_w, _ = img.shape

    # 3. Математическое деление доски на 8 рядов и 8 колонок
    cell_w = img_w / 8.0
    cell_h = img_h / 8.0

    # 4. Начальная расстановка шахматных фигур (Стандартная нотация):
    # Строка 0 — 8-я горизонталь (черные фигуры)
    # Строка 1 — 7-я горизонталь (черные пешки)
    # Строка 6 — 2-я горизонталь (белые пешки)
    # Строка 7 — 1-я горизонталь (белые фигуры)
    # Обозначения: K/k - король, Q/q - ферзь, R/r - ладья, B/b - слон, N/n - конь, P/p - пешка
    board_layout = [
        ["black_r", "black_n", "black_b", "black_q", "black_k", "black_b", "black_n", "black_r"],
        ["black_p"] * 8,
        [None] * 8,
        [None] * 8,
        [None] * 8,
        [None] * 8,
        ["white_P"] * 8,
        ["white_R", "white_N", "white_B", "white_Q", "white_K", "white_B", "white_N", "white_R"],
    ]

    # Словарь для учета количества сохраненных дубликатов (например, 8 пешек)
    piece_counter = {}

    print("Начало нарезки фигур...")

    for row in range(8):
        for col in range(8):
            piece_code = board_layout[row][col]

            # Если на клетке стоит фигура
            if piece_code is not None:
                # Математический расчет координат x1, y1, x2, y2 клетки
                x1 = int(round(col * cell_w))
                y1 = int(round(row * cell_h))
                x2 = int(round((col + 1) * cell_w))
                y2 = int(round((row + 1) * cell_h))

                # Вырезаем область клетки
                cropped_square = img[y1:y2, x1:x2]

                # Формируем имя файла
                count = piece_counter.get(piece_code, 0) + 1
                piece_counter[piece_code] = count

                # Если фигура одна (например, король), имя без индекса: white_K.png
                # Если их несколько (например, пешки): white_P_1.png, white_P_2.png
                filename = f"{piece_code}_{count}.png" if count > 1 else f"{piece_code}.png"
                save_path = os.path.join(output_folder, filename)

                # Сохраняем вырезанную фигуру
                cv2.imwrite(save_path, cropped_square)
                print(f"Сохранено: {save_path}")

    print(f"\nГотово! Все фигуры сохранены в папку '{output_folder}'.")

if __name__ == "__main__":
    extract_chess_pieces()