PIL と python を使用して色のグリッドを構築しようとしているときに、イライラする問題に遭遇しました。グリッドをループして色を抽出することはできますが、それらを読み返すと、何らかの理由でそれらの 1 つ以上が常に消えてしまいます。これは信じられないほど基本的なエラーのように思えますが、非常に苛立たしいものです。
これが問題のコードです。cx と cy は、グリッド内の各サンプル ポイントの中心を指すだけで、色はサンプル領域で最も使用される色です。
image = ImageGrab.grab(box)
matrix = [[None] * ROWS] * COLS
c1 = set()
for row in range(ROWS):
for col in range(COLS):
cx = (col * CELLW) + int(CELLW / 2)
cy = (row * CELLH) + int(CELLH / 2)
sample_box = (cx - SAMPLE_SIZE, cy - SAMPLE_SIZE, cx + SAMPLE_SIZE, cy + SAMPLE_SIZE)
sample = image.crop(sample_box)
color = sorted(sample.getcolors())[-1][1]
matrix[col][row] = color
c1.add(color)
print(c1)
c2 = set()
for row in range(ROWS):
for col in range(COLS):
c2.add(matrix[col][row])
print(c2)
ご覧のとおり、(私が思うに) 起こるべきことは、 c1 がすべての一意の色を保持し、それらを印刷することです。次に、 c2 は同じことをループし、一意の色も印刷します。なぜ違うのかわかりませんが、違うのです。
出力は次のようになります。
{(240, 240, 240), (255, 255, 255), (252, 252, 252)}
{(240, 240, 240), (255, 255, 255)}
この苛立たしい問題の助けをいただければ幸いです