0

두 패스 연결 구성 알고리즘은 하나의 이미지에서 별도의 구성 요소를 감지하고 각 감지 후에는 component을 다른 이미지로 저장합니다. 모든 component을 별도의 이미지에 표시하려면 여러 개의 if 조건을 사용하고 있지만 각 구성 요소의 이미지에 많은 모양이있을 때마다이 if conditions이 증가하고 있습니다. 지금까지는 조건이 7 개 있지만 증분을 사용했습니다. 어떤 아이디어가 그것을 위해 루프를 사용하는 방법이나 그것을 다루는 방법.두 패스 연결 구성 요소, 구성 요소 수 문제

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

[코드가 여러 개인 경우 루프를 사용하는 방법] (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 '객체는 항목 할당을 지원하지 않습니다'secondly'count' 이미지에있는 흰색 픽셀을 계산하고 43 이상이면 버리는 것과 다른 것입니다. –