Python OpenCVを使用して、エッジ検出画像のすべてのエッジを見つけて分離しようとしています。エッジは輪郭の形にすることができますが、そうである必要はありません。接続されたすべてのエッジピクセルをグループ化したいだけです。したがって、技術的には、アルゴリズムは手続き的に次のように聞こえるかもしれません。
- エッジ ピクセルごとに、隣接する (接続された) エッジ ピクセルを見つけて、それが見つからなくなるまで、画像の現在のサブディビジョンに追加します。
- 次に、チェックされていない次のエッジ ピクセルに移動し、新しいサブディビジョンを開始して、1) をもう一度実行します。
調べてみましcv.findContours
たが、結果は満足のいくものではありませんでした。おそらく、自由端ではなく輪郭 (囲まれたエッジ) を対象としていたためです。結果は次のとおりです。
元のエッジが検出されました:
輪郭処理後:
5 つのエッジがそれぞれ画像の独自のサブディビジョンにグループ化されることを期待していましたが、どうやら cv2.findContours 関数は 2 つのエッジをさらにサブディビジョンに分割しますが、これは望ましくありません。
これら2つの画像を保存するために使用したコードは次のとおりです。
def contourForming(imgData):
cv2.imshow('Edge', imgData)
cv2.imwrite('EdgeOriginal.png', imgData)
contours = cv2.findContours(imgData, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow('Contours', imgData)
cv2.imwrite('AfterFindContour.png', imgData)
cv2.waitKey(0)
pass
ただし、私の実装には制限があります。Python 2.7 と OpenCV2 を使用する必要があります。これら以外のリビジョンや言語は使用できません。私がこれを言うのは、OpenCV 2 には C++ を使用した connectedComponent 関数があることを知っているからです。私はそれを使用することができましたが、問題は、特定の制限のために使用できないことです.
それで、私は問題にどのようにアプローチすべきか考えていますか?