0

2パス接続コンポーネントアルゴリズムは1つのイメージ内の別々のコンポーネントを検出しており、検出後にはすべてcomponentを別のイメージとして保存しています。各componentを別々の画像に表示するには、複数のif条件を使用していますが、これらのif conditionsは、すべてのコンポーネントの画像に形状がたくさんあるときはいつも増えています。任意のアイデアをどのようにループを使用するか、それをどう対処するか。2パス接続コンポーネント、コンポーネント数

for (x, y) in labels: 
      component = uf.find(labels[(x, y)]) 
      labels[(x, y)] = component 
      ############################################################ 
      if labels[(x, y)]==0: 
       Zero[y][x]=int(255) 
       count=count+1 
       if count<=43: 
        continue 
       elif count>43: 
        Zeroth = Image.fromarray(Zero) 
        Zeroth.save(os.path.join(dirs, 'Zero.png'), 'png') 
      ############################################################# 
      if labels[(x, y)]==1: 
       One[y][x]=int(255) 
       count1=count1+1 
       if count1<=43: 
        continue 
       elif count1>43: 
        First = Image.fromarray(One) 
        First.save(os.path.join(dirs, 'First.png'),'png') 
+0

[coniditionsの複数の場合にループを使用する方法](https://stackoverflow.com/questions/47969274/how-to-use-loop-for-multiple-if-coniditions) –

答えて

0

私は、私は完全にあなたのコードを理解していないが、私はあまりにも多くの変数とif文のあなたの問題に簡単な修正があるかもしれないと思います。それぞれの画像を保存するために別々の変数とコードを使用するのではなく、それらをリストに入れてこれらのリストにインデックスを付けて、更新して保存する値を取得する必要があります。ここで

は、それはあなたのコードのために見えるかもしれません方法は次のとおりですので、代わりなどZero.pngOne.png、のあなたがプログラムで画像ファイル名を生成する必要が

# at some point above, create an "images" list instead of separate Zero, One, etc variables 
# also create a "counts" list instead of count, count1, etc 

    for (x, y) in labels: 
     component = uf.find(labels[(x, y)]) 
     labels[(x, y)] = component 

     # optionally, add code here to create a new image if needed 

     images[component][y][x] = 255 # update image 
     counts[component] += 1   # update count 

     if counts[component] > 43:  # if count is high enough, save out image 
      img = images[component] = Image.fromarray(Zero) 
      img.save(os.path.join(dirs, 'image{:02d}.png'.format(component), 'png') 

注意が、私はimage00.pngimage01.pngのために行ってきました。同じ名前のシステムを使用したい場合は、数字から英語の名前へのマッピングを作成できますが、後で使用する場合は数字を使用する方が便利でしょう。

事前に必要なイメージとカウントがわからない場合は、必要に応じて新しいロジックを追加し、imagescountsリストに追加する余分なロジックをループに追加することができます。上記のコードで、ロジックをどこに置くべきかを示すコメントを付けました。

+0

コードを投稿してくださいimage = np.zeros(shape =(100,100)、dtype = np.uint8) 'を使用していますが、' numpy.uint8 'というエラーを返します。オブジェクトはアイテム割り当てをサポートしていません。 'second'' count'別のものでは、画像の白い画素を数え、43を超えると破棄します –

関連する問題