Python OpenCV drawContours терпит неудачу, когда я рисую только больший объект контура

Я пытаюсь нарисовать контур самого большого объекта.

Сначала я покажу изображение, рисующее все контуры:

Все контуры объектов

Чтобы найти самый большой объект, я использовал этот код:

maxsize = 0  
best = 0  
count = 0  
for cnt in contours:  
    if cv2.contourArea(cnt) > maxsize:  
        maxsize = cv2.contourArea(cnt)  
        best = count  
    count += 1  

cv2.drawContours(img_rgb, contours[best], -1, (0,0,255), 2)  

И результат следующий:Контуры самого большого объекта

Почему контуры не связаны?

Заранее спасибо.

1 ответ

Решение

Посмотрите, что в вашем коде вы говорите -1 параметр функции рисовать все ваши контуры, когда вы на самом деле хотите нарисовать только best один. Итак, вместо -1 (все) вы можете просто попросить функцию нарисовать контур, который вы хотите.

Вы можете исправить эту проблему, заменив строку:

cv2.drawContours(img_rgb, contours[best], -1, (0,0,255), 2)  

с:

cv2.drawContours(img_rgb, contours, best, (0,0,255), 2)

или вы все еще можете использовать -1, но тогда вам понадобится в качестве параметра набор точек ([]):

cv2.drawContours(img_rgb, [contours[best]], -1, (0,0,255), 2)  

Вы можете получить больше информации об этой теме на странице Документов OpenCV.

Другие вопросы по тегам