Для частного случая если у вас квадраты примерно одинаковы и в основном соприкасаются:
- получаем контуры элементов с помощью
cv2.findContours в список
contours
- находим площадь наиболее часто встречающегося элемента с помощью
collections.Counter.most_common по найденным контурам - это мы найдем площадь одного квадрата - по сути количество пикселей в одном квадрате
occurence_count = Counter(map(lambda x:cv2.contourArea(x), contours))
most_common_area = round(occurence_count.most_common(1)[0][0])
- находим общее количество черных пикселей
black_pixels = np.sum(binary == 0)
- делим общее количество черных пикселей на количество пикселей одного квадрата, округляем - получаем общее число квадратов на картинке
У меня вышло примерно 1035