Как обнаружить пересекающиеся фигуры с помощью OpenCV findContours?Python

Программы на Python
Ответить
Anonymous
 Как обнаружить пересекающиеся фигуры с помощью OpenCV findContours?

Сообщение Anonymous »

У меня есть два пересекающихся эллипса на черно-белом изображении. Я пытаюсь использовать OpenCV findContours для идентификации отдельных фигур как отдельных контуров, используя этот код (и прикрепленное изображение ниже).
Изображение

Код: Выделить всё

import numpy as np
import matplotlib.pyplot as plt

import cv2
import skimage.morphology

img_3d = cv2.imread("C:/temp/test_annotation_overlap.png")
img_grey = cv2.cvtColor(img_3d, cv2.COLOR_BGR2GRAY)
contours = cv2.findContours(img_grey, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[-2]

fig, ax = plt.subplots(len(contours)+1,1, figsize=(5, 20))

thicker_img_grey = skimage.morphology.dilation(img_grey, skimage.morphology.disk(radius=3))
ax[0].set_title("ORIGINAL IMAGE")
ax[0].imshow(thicker_img_grey, cmap="Greys")

for i, contour in enumerate(contours):
new_img = np.zeros_like(img_grey)
cv2.drawContours(new_img, contour, -1,  (255,255,255), 10)
ax[i+1].set_title(f"Contour {i}")
ax[i+1].imshow(new_img, cmap="Greys")

plt.show()
Однако четыре контура найдены, ни один из которых не является исходным:
Изображение

Как настроить OpenCV.findContours для идентификации двух отдельных фигур? (Обратите внимание, что я уже экспериментировал с кругами Хафа и обнаружил, что они ненадежны для анализируемых изображений)

Подробнее здесь: https://stackoverflow.com/questions/653 ... ndcontours
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»