2016-11-13 3 views
0

私は今、PythonとOpenCVを使って画像のセグメンテーションを行っています。 私は1つのオブジェクトのみを含むバイナリイメージを持っています(既にOtsuのメソッドを使って閾値処理されています)。私はイメージのオブジェクトのアウトライン(外側の境界線)を取得する方法を知りたい。したがって、白いオブジェクトの輪郭を持つ黒い画像だけが存在します。すでにグーグルで試してみましたが、まだ分かりません。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()マニュアルアプローチ:簡単な方法は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) 

binary_erosion and subtraction

関連する問題