2016-06-17 4 views
0

Я хотел бы обнаружить контур гигантского черного сгустка в следующем изображении:Некорректное обнаружение контура в изображение питона OpenCV

enter image description here

Поэтому я использовал оператор кэнни, чтобы найти края, используя следующие код:

edged = cv2.Canny(image, 30, 200) 

enter image description here

Тогда, когда я пытаюсь найти контур, он дает мне только половину на клякса.

enter image description here

Это код, который я использовал, чтобы найти контур:

# find contours in the edged image, keep only the largest 
# ones, and initialize our screen contour 
(cnts, _) = cv2.findContours(image.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:10] 

# Scan the contours for largest item 
array_sizes = [] 

for numpoints in cnts: 
    array_sizes.append(len(numpoints)) 

largest = max(array_sizes) 
second = second_largest(array_sizes) 
index_of_object = array_sizes.index(largest) 

# Largest detected contour 
screenCnt = cnts[index_of_object] 

Есть ли какие-либо изменения, я могу сделать в исходном изображении, чтобы получить полную и более точное обнаружение большой черный BLOb? Вся помощь приветствуется.

ответ

-1

Проблема в вашем рабочем процессе.

Удалите оператора Canny из вашей обработки. Это даст вам изображение края из ваших капель. Как только вы обработаете изображение Canny с помощью contourFinder, он будет обрабатывать сегменты кромок как объекты. Ваш самый большой контур будет иметь самый длинный краевой сегмент. Если вы приближаетесь к своему изображению Canny, вы увидите, что есть пробелы, где заканчивается ваш текущий результат.

Чтобы получить контур blob skip Canny. Возможно, вам нужно инвертировать изображение, если findContours рассматривает белый как передний план.

Пожалуйста, ознакомьтесь с этими методами, чтобы вы больше не столкнулись с такими ловушками.