Ниже приведен исходный снимок экрана. :

Здесь это код у меня есть, но не хватает некоторых пустых квадратов и большинства квадратов, содержащих буквы.
Код: Выделить всё
import cv2
import numpy as np
image = cv2.imread(r'image_path')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blurred, 50, 150)
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
output_image = image.copy()
for contour in contours:
epsilon = 0.02 * cv2.arcLength(contour, True)
approx = cv2.approxPolyDP(contour, epsilon, True)
if len(approx) == 4 and cv2.isContourConvex(approx):
(x, y, w, h) = cv2.boundingRect(approx)
aspect_ratio = float(w) / h
if aspect_ratio > 0.8 and aspect_ratio < 1.2:
cv2.drawContours(output_image, [approx], -1, (0, 255, 0), 3)
cv2.imshow('Detected Squares', output_image)
cv2.imwrite('processed_cleaned_image.png', output_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Две буквы в руке игрока и большинство клеток на доске отсутствуют.
Учитывая ограничение, которое всегда будет на доске иметь квадраты 15x15, и что в руке игрока будет 7 квадратов, за исключением нескольких последних раундов.
Также я попробовал решение «Обнаружение квадратов по изображению», но ситуация стала хуже.
Подробнее здесь: https://stackoverflow.com/questions/792 ... n-in-image