@gareaf

Как разделить квадраты которые пересикаются?

Суть задачи: нужно подсчитать количество квадратов.
Есть картинка на которой есть шумы, я их убрал, но не знаю, как разделить квадраты которые пересекаются или можно подсчитать квадраты, без разделения.
Буду благодарен любой помощи.

вот картинка с шумами
https://imgur.com/a/gI8Zjbl

вот без шумов
613f3fdc63d94352373875.png

код
import cv2
import matplotlib.pyplot as plt 


image = cv2.imread("1.bmp")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

_, binary = cv2.threshold(gray, 3, 255, cv2.THRESH_BINARY)
plt.imshow(binary, cmap="gray")
plt.show()
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Для частного случая если у вас квадраты примерно одинаковы и в основном соприкасаются:
- получаем контуры элементов с помощью 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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы