2016-11-13 6 views
0

Я сейчас работаю над сегментацией изображений, используя Python и OpenCV. У меня есть двоичное изображение, которое содержит только один объект (уже порожденный с использованием методов Otsu's). Я хочу знать, как получить контур объекта изображения (внешняя граница). Таким образом, будет только черное изображение с контуром белого объекта. Уже пробовал Google, но до сих пор не имею идеи.Как получить структуру объекта изображения (внешняя граница) в Python?

Я предпочитаю знать, как это сделать вручную без встроенной функции.

ответ

0

Встраиваемая функция: findContours().

Пример:

import numpy as np 
import matplotlib.pyplot as plt 

a = np.zeros((100,100), np.uint8) 
a[10:20,30:40] = 1 

im2, contours, hierarchy = cv2.findContours(a, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 
cim = np.zeros_like(a) 
cv2.drawContours(cim, contours, -1, 255, 1) 
plt.matshow(cim, cmap=plt.cm.gray) 

 findContours() Ручной подход: простой способ будет вычитанием eroded image из исходного изображения с использованием binary_erosion(). Это не обязательно приведет к закрытому контуру, в зависимости от геометрии.

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.ndimage.morphology import binary_erosion 

a = np.zeros((100,100), np.uint8) 
a[10:20,30:40] = 1 
m = a - binary_erosion(a) 
plt.matshow(m, cmap=plt.cm.gray) 

binary_erosion and subtraction

 Смежные вопросы

  • Нет связанных вопросов^_^