2015-11-19 5 views
1

При рисовании контура с использованием OpenCV's drawContours границы рисуются в центре с контуром, я хочу нарисовать границу только на внешней стороне контура.Python OpenCV контур рисования только на внешней границе

Это изображение (взято из документации SketchUp) объясняет, что лучше: enter image description here

drawContours рисует контур, как в первом круге (контур находится в середине нарисованной границы). Мне нужно иметь границу только на внешней стороне контура, как в последнем круге.

У кого-нибудь есть идея, как я могу достичь такого поведения?

Спасибо.

+1

OpenCV не имеет встроенной функции, чтобы сделать это. Если вы не слишком заботитесь о производительности, вы можете: 1) нарисовать заполненный белый контур на 'mask1', 2) расширить на 1 на' mask2', 3) 'mask3 = mask1 XOR mask2'. 4) установите пиксели в своем изображении цвета, который вы хотите, используя 'mask3'. – Miki

+0

У вас всегда будет внутренний круг с однородным цветом, и есть ли у вас информация о цвете внутреннего круга в точке рисования контуров? – ZdaR

+0

@ZdaR Да и да. –

ответ

0

использовать код как

_ret, contours, hierarchy = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 
    cv2.drawContours(img,contours , -1, (255,0,0), 1) 

здесь cv2.RETR_EXTERNAL дает только внешний контур обнаружен.

+1

Спасибо за ваш ответ AdityaIntwala, но я говорю о контурах рисунков и не обнаруживая контуры. –

+1

вам нужно найти внешний контур для этого ... если вы найдете внешний контур, вы можете нарисовать найденный внешний контур, используя функцию drawContours нормально. – AdityaIntwala

1

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

#First you draw the contour on both the sides of the border. 
contour_id = 0 
border_thickness = 10 
border_color = (185, 115, 72) 
cv2.drawContours(img, contours, contour_id, border_color, border_thickness) 

#Now you again draw contour but with thickness = -1 and color = Core color 
border_thickness = -1 
core_color = (225, 141, 98) 
cv2.drawContours(img, contours, contour_id, core_color, border_thickness) 
Смежные вопросы