Используя следующий метод, вы можете найти решение.
Полный код решения:
import cv2
import numpy as np
img = cv2.imread('test.jpg', 0)
output_img = img.copy()
cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU,img)
kernel = np.ones((50,70), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)
im2,contours, hier = cv2.findContours(img.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
# get the bounding rect
x, y, w, h = cv2.boundingRect(c)
# draw a white rectangle to visualize the bounding rect
cv2.rectangle(output_img, (x, y), (x + w, y + h), 255, 1)
cv2.imshow('output',output_img)
cv2.waitKey(0)
Сначала вы должны создать ядро в соответствии с вашими требованиями.
Чем больше размер ядра, тем больше точек, принадлежащих кластеру.
Затем, используя метод cv2.dilate
, вы должны расширить изображение, используя
созданное ядро.
После этого вы должны найти контуры расширенного изображения и получить
ограничивающий прямоугольник этих контуров.
Один прямоугольник можно рассматривать как один кластер.
Вы можете изменить размер кластера, используя kernel = np.ones((50,70), np.uint8)
Здесь он равен 50 x 70.
ВЫВОД: