如何在Python中获取图像的对象轮廓(外边界)?

时间:2016-11-13 12:58:59

标签: python opencv image-processing image-segmentation

我正在使用Python和OpenCV进行图像分割。 我有一个只包含一个对象的二进制图像(已经使用Otsu的方法进行了阈值处理)。我想知道如何获取图像的对象轮廓(外边界)。因此,只有一个带有白色物体轮廓的黑色图像。已经尝试过谷歌搜索,但仍然没有想法。

我更喜欢在没有内置功能的情况下手动操作。

1 个答案:

答案 0 :(得分:2)

内置功能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

相关问题