Как нарисовать квадрат вокруг точек на изображении - PullRequest
0 голосов
/ 27 августа 2018

У меня есть двоичное изображение с белыми точками. Как я могу определить и нарисовать квадрат вокруг этих точек, используя OpenCV?

Проблема в том, что точки очень маленькие, и до сих пор все попытки не смогли найти все точки.

Это входное изображение: bin image

Вот результат, который меня интересует: exepted result

Есть ли возможность использования функции OpenCV? И если нет, (из-за размера), что является наиболее эффективным способом?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Используя следующий метод, вы можете найти решение.

Полный код решения:

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.

ВЫВОД:

image

0 голосов
/ 30 августа 2018
  1. Примените Расширение на вашем изображении с размером 5.

  2. Если расстояние между точками <10, они будут объединены в одну большую точка. </p>

  3. Если расстояние> 10, оно будет отделено как есть.

  4. Поиск контуров по результату.

  5. Получить minAreaRect каждого контура.

  6. Готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...