内蔵機能: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)
マニュアルアプローチ:簡単な方法はbinary_erosion()を用いて原画像からeroded imageを減算することになります。 ジオメトリに応じて、閉じた輪郭になることはありません。
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)