2017-11-21 24 views
1

私はcannyアルゴリズムを使ってエッジを見つけています。Python:canny close edgeの領域内に領域を保持する方法

次に、閉曲線の内側に領域を残したいと思います。

私のコードサンプルは次のとおりです。

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 
import scipy.ndimage as nd 
from skimage.morphology import watershed 
from skimage.filters import sobel 

img1 = cv2.imread('coins.jpg') 
img = cv2.imread('coins.jpg',0) 

edges= cv2.Canny(img,120,200) 

markers = np.zeros_like(img) 
markers[edges<50] = 0 
markers[edges==255] = 1 
img1[markers == 1] = [0,0,255] 
img1[markers == 0] = [255,255,255] 

cv2.imshow('Original', img) 
cv2.imshow('Canny', img1) 

#Wait for user to press a key 
cv2.waitKey(0) 

私の出力画像は、私はコインの内側原画素値を表示したいenter image description here

です。それは可能ですか?

答えて

0

img1の白いピクセルの接続されたコンポーネントを取得するには、union-find構造を使用することをお勧めします。 (アルゴリズムの詳細については、Wikipedia:https://en.wikipedia.org/wiki/Disjoint-set_data_structureをご覧ください)。

接続されたコンポーネントがあれば、私のベストプラクティスは、画像の境界にポイントを含まない(コインの内部に対応する)接続されたコンポーネントを検討し、 img。

確かにあなたのコインの間にはまだ着色されているかもしれないが、対応する接続​​されたコンポーネントを手で取り除くことができます。

0

硬貨の輪郭は連続していないので、どんな種類の充填物も漏れる。

形態の処理(侵食)によってエッジを修復できますが、これによりコインが接触し、それらの間に到達不能な領域が作成されます。

代替手段として、ディスク内にハフサークルディテクタとマスクを試すことができます。

関連する問題