Рубрики

Найти круги и эллипсы в изображении, используя OpenCV | питон

Чтобы идентифицировать круги, эллипсы или вообще любую форму, в которой соединены пиксели, мы используем SimpleBlobDetector() из OpenCV. В нетехнических терминах капля понимается как густая капля жидкости. Здесь мы будем называть все формы как капли. Наша задача — обнаружить и распознать, является ли капля кругом или нет.

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

  • Фильтр по области — это позволяет избежать каких-либо небольших точек, присутствующих на изображении, которые могут быть ошибочно обнаружены в виде круга.
  • Фильтр по округлости — это помогает нам определить формы, которые больше похожи на круг.
    Circularity = . 

    Истинный круг имеет круглость 1, квадрат имеет круглость около 78%.

  • Фильтр по выпуклости — вогнутость в целом, разрушает округлость. Чем больше выпуклость, тем ближе она к близкому кругу.
  • Фильтр по инерции — объекты, похожие на окружность, имеют большую инерцию. Например, для окружности это значение равно 1, для эллипса оно составляет от 0 до 1, а для линии — 0. Для фильтрации по коэффициенту инерции установите filterByInertia = 1, и установите 0 <= minInertiaRatio <= 1 и maxInertiaRatio (<= 1) соответственно.

Ниже приведен код для идентификации кругов:

import cv2

import numpy as np

  
# Загрузить изображение

image = cv2.imread('C://gfg//images//blobs.jpg', 0)

  
# Установите наши параметры фильтрации
# Инициализировать настройку параметров с помощью cv2.SimpleBlobDetector

params = cv2.SimpleBlobDetector_Params()

  
# Установить параметры фильтрации области

params.filterByArea = True

params.minArea = 100

  
# Установить параметры фильтрации по кругу

params.filterByCircularity = True 

params.minCircularity = 0.9

  
# Установить параметры фильтрации выпуклости

params.filterByConvexity = True

params.minConvexity = 0.2

      
# Установить параметры инерционной фильтрации

params.filterByInertia = True

params.minInertiaRatio = 0.01

  
# Создать детектор с параметрами

detector = cv2.SimpleBlobDetector_create(params)

      
# Обнаружить капли

keypoints = detector.detect(image)

  
# Нарисуйте капли на нашем изображении в виде красных кружков

blank = np.zeros((1, 1)) 

blobs = cv2.drawKeypoints(image, keypoints, blank, (0, 0, 255),

                          cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

  

number_of_blobs = len(keypoints)

text = "Number of Circular Blobs: " + str(len(keypoints))

cv2.putText(blobs, text, (20, 550),

            cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 100, 255), 2)

  
# Показать капли

cv2.imshow("Filtering Circular Blobs Only", blobs)

cv2.waitKey(0)

cv2.destroyAllWindows()

Выход:

Рекомендуемые посты:

Найти круги и эллипсы в изображении, используя OpenCV | питон

0.00 (0%) 0 votes