2016-11-09 38 views
2

私はPythonでOpenCVを使って画像内の曲線の座標を抽出しようとしています。しかし、リストの最初の要素がカーブの一方の端点であり、他方の端点が他の端点である最後の要素まで右端などであるように、これらの座標がリスト内で順序付けされている必要があります。OpenCV(Python)で曲線の座標を求める

は、私は次のnumpyの配列としてOpenCVのでインポート文字「C」の画像を持っていると言う:

arr= 
[0,0,0,0,0,0,0 
    0,0,1,1,1,0,0 
    0,0,1,0,0,0,0  
    0,0,1,0,0,0,0 
    0,0,1,1,1,0,0 
    0,0,0,0,0,0,0] 

その後、私は、次の順序で画素の座標を返すリストが欲しい:

arr= 
[0,0,0,0,0,0,0 
    0,0,3,2,1,0,0 
    0,0,4,0,0,0,0  
    0,0,5,0,0,0,0 
    0,0,6,7,8,0,0 
    0,0,0,0,0,0,0] 

リスト(配列のピクセル「1」の座標、ピクセル「2」の座標など)です。

この「連続性」の考え方は、findContours()には多少ありますが、このような1ピクセル幅のオブジェクトの輪郭を見つけるにはあまりうまく機能しません。画素の多くは、得られた輪郭(問題のすぎない)で二回出てくるが、それは、一の末端で開始されないこと、および降伏点は、これが

arr= 
[0,0,0,0,0,0,0 
    0,0,1,7,8,0,0 
    0,0,2,0,0,0,0  
    0,0,3,0,0,0,0 
    0,0,4,5,6,0,0 
    0,0,0,0,0,0,0] 

として順に座標アルゴリズムは、基本的に1から6まで変化し、1に戻ってから8に進み、「輪郭」を得るために1に戻る。 私は、単純なしきい値+ numpy.nonzeroを試してみました、それは私が望むようにそれらを注文しませんもちろん、それは

arr= 
[0,0,0,0,0,0,0 
    0,0,1,2,3,0,0 
    0,0,4,0,0,0,0  
    0,0,5,0,0,0,0 
    0,0,6,7,8,0,0 
    0,0,0,0,0,0,0] 

は、私が何か大きな足りないために生じ?私はPythonや画像処理には新しくないが、OpenCVを始めたばかりだ。

答えて

2

これは良いopencvの実装についてはわかりませんが、Moore-Neighbor Tracingを使用してmodfiyすることができますので、boudaryで見つかったポイントの値を増分値に設定します。

+0

「Moore-Neighbor Tracing」は有望そうです私はそれを試してみました –

関連する問題