2017-10-22 3 views
1

問題があります。イメージ内のオブジェクトを1行にする

だから、私はこのイメージを持っている、と私は1行に数字のすべてを入れたい: enter image description here

しかし、私はこれだけだ:あなたが見ることができるようにそれが1であれば、 enter image description here

を、0、7 - すべての罰金ですが、4と3 ...

と私のコード:代わりに

def reshape_img(self): 
    width, height = self.img.size 
    new_img_list = [] 
    for x in range(width): 
     white_y = 0 
     start_nr = False 
     for y in range(height): 
      red, green, blue = self.img.getpixel((x, y)) # Current color 
      if red != 255: 
       start_nr = True 
       new_y = y - white_y + 5 
       new_img_list.append((x, new_y, (red, green, blue))) 
      elif red == 255 and not start_nr: 
       white_y += 1 
    return new_img_list 

def new_image(image_list): 
    background = (255, 255, 255, 255) 
    img = Image.new('RGB', (545, 20), background) 
    pixels = img.load() 
    for d in image_list: 
     pixels[d[0], d[1]] = d[2] 
    img.save('img2.png') 
+1

「4」だけでサンプルを作成できますか? [mcve]の作成方法を参照してください。 –

答えて

1

その列の最初の白以外のピクセルに基づいてピクセルの各列を調整し、プラスまたはマイナスのある範囲(列全体をカバーするのに十分な)に隣接する列を見て、それらのすべての最小値を取る。この方法では、桁はブロックとして上下に移動し、異なる桁で異なる桁で歪んではなりません。あなたは、最小値を格納するためのリストを使用して、パスのカップルでそれを行うことができます。

def reshape_img(self): 
    width, height = self.img.size 
    y_start = [height] * width 

    # find the first non-white pixel of each column (checking only red channel): 
    for x in range(width): 
     for y in range(height): 
      red, green, blue = self.img.getpixel((x, y)) # Current color 
      if red != 255: 
       y_start[x] = y 
       break 

    new_img_list = [] 
    for x in range(width): 
     # find minimum of adjacent columns +/- 5 left and right: 
     white_y = min(y_start[min(0,x-5):max(width-1:x+5)]) 
     for y in range(white_y, height): 
      red, green, blue = self.img.getpixel((x, y)) # Current color 
      if red != 255: 
       new_y = y - white_y + 5 
       new_img_list.append((x, new_y, (red, green, blue))) 
    return new_img_list 

(未テストコード)

このアルゴリズムは、あなたのイメージであるとして(数字の間にそこにいるのスペースに依存しています)、変更された場合は、数字のサイズと間隔に基づいて隣接する列の数を調整する必要があります。連続していない白黒以外の列のブロックを最小限に抑えるだけで、より堅牢にすることができます。したがって、すべて白の列がある場合、一方の列は他方の列に影響を与えることはできません。

関連する問題