Контуры на изображении выглядят очень небрежно с помощью cv2 findContours. Как улучшить?

Я пытаюсь найти контур изображения, используя cv2. Есть много связанных вопросов, но ответ всегда оказывается очень конкретным и не применимым к моему случаю.

У меня есть черно-белое изображение, которое я превращаю в цвет.

thresh = cv2.cvtColor(thresh, cv2.COLOR_RGB2GRAY) 
plt.imshow(thresh)

введите изображение  описание здесь

Далее я пытаюсь найти контуры.

image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

а затем визуализирую его, нанося на черный фон.

blank_image = np.zeros((thresh.shape[0],thresh.shape[1],3), np.uint8) 
img = cv2.drawContours(blank_image, contours, 0, (255,255,255), 3)
plt.imshow(img)

Контурное изображение

Контур повторяет фактический контур, то есть окружает все это. Как я могу получить что-то вроде этого очень плохого впечатления от краски:

введите здесь описание изображения


person Mitchell van Zuylen    schedule 09.04.2019    source источник
comment
Я думаю, что артефакт, который вы ищете, - это края, а не контуры.   -  person Him    schedule 09.04.2019
comment
Предоставьте минимальный воспроизводимый пример, который воспроизводит проблему, а также исходное исходное изображение. Используется государственная версия OpenCV. | Почему координаты на втором графике выходят за пределы 4000? Означает ли это, что ваше входное изображение такое большое?   -  person Dan Mašek    schedule 09.04.2019
comment
Я использую версию 3.4.1. Да, исходное изображение такое большое.   -  person Mitchell van Zuylen    schedule 10.04.2019


Ответы (1)


Вы можете использовать обнаружение границ Canny, чтобы сделать это:

введите здесь описание изображения

import cv2
frame = cv2.imread("iCyrOT3.png")                       # read a frame
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)          # turn it gray
edges = cv2.Canny(gray, 100, 200)                       # get canny edges
cv2.imshow('Test', edges)                               # display the result
cv2.waitKey(0)
person Matthew Salvatore Viglione    schedule 09.04.2019
comment
Это работает. Как ни странно, это не работает с исходным изображением размером около 4000x4000. Видимо, размер должен быть достаточно маленьким, чтобы работать. - person Mitchell van Zuylen; 10.04.2019
comment
@MitchellvanZuylen, это очень интересно. Я буду экспериментировать с ним. У меня тоже есть решение с использованием контуров, но я должен очистить его перед публикацией. - person Matthew Salvatore Viglione; 10.04.2019