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()