Нахождение внешних контуров в изображении - PullRequest
0 голосов
/ 09 апреля 2020

Я пытался найти контур (внешний контур) маркера доски на изображении. Я попытался использовать openCv для этого (кажется, наименее сложным). Я выполнил серое масштабирование и отфильтровал изображение, но все еще не могу получить достаточно хорошие результаты. Изображения, над которыми я работаю, очень хорошие (например, в них нет других объектов), и я совершенно уверен, что это возможно (без использования тяжелых алгоритмов DL).

Вот что я получаю:

enter image description here

Это (примерно) то, что я пытаюсь получить (это было сделано с помощью Волшебник фотошопа c wand):

enter image description here

Я пробовал разные алгоритмы, но, похоже, ни один из них не работает (В приведенном выше примере просто используется cv2.findContours с cv2 .RETR_TREE и cv2.CHAIN_APPROX_SIMPLE). Я обнаружил, что многие люди задают очень похожие вопросы, но ответы на них не работают для меня.

(например: Обработка изображения для поиска внешнего контура или https://answers.opencv.org/question/182345/how-do-i-draw-only-external-contour/)

Вот оригинальное изображение:

enter image description here

В любом случае, спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Поэтому, используя предоставленную Сергеем ссылку и используя порог вместо серой шкалы, я получаю намного лучшие результаты. Это код:

import cv2 # Import OpenCV
import numpy as np # Import NumPy
from matplotlib import pyplot as plt

image = cv2.imread("./image.jpg")

height, width = image.shape[0], image.shape[1]

white_padding = np.zeros((50, width, 3))
white_padding[:, :] = [255, 255, 255]
image = np.row_stack((white_padding, image))

_, mask = cv2.threshold(image, 220, 255, cv2.THRESH_BINARY_INV)


kernel = np.ones((30, 30), np.uint8)
closing = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

closing_uint8 = np.uint8(closing)


edges = cv2.Canny(closing_uint8, 100, 200)

plt.imshow(edges)
plt.show() 

Проблема в том, что размер ядра необходимо изменить для разных изображений, например, это изображение:

enter image description here

выводит это: enter image description here

Есть идеи, как решить эту проблему? Спасибо за вашу помощь!

0 голосов
/ 09 апреля 2020

Взгляните на этот вопрос

Я считаю, что это то, что вы ищете.

...