web-dev-qa-db-ja.com

画像のピクセル値を変更するには?

私は画像処理プロジェクトに取り組んでおり、PythonでPILを使用しています。

だから、私がやっていることは、星とノイズのある空間のイメージを持っているということです。私がしたいのは、明るいピクセルのみを保持し、鈍いピクセルを除外することです。今のところ、これはノイズを除去しようとする私の基本的なステップです。画像データを調べた結果、205の値がしきい値を維持したい可能性が非常に高いことがわかりました。

したがって、コードで行っているのは、画像を開き、205を含むピクセル値を黒に変更することです。同じコードを次に示します。

from PIL import Image
im = Image.open('nuvfits1.png')
pixelMap = im.load()

img = Image.new( im.mode, im.size)
pixelsNew = im.load()
for i in range(img.size[0]):
    for j in range(img.size[1]):
        if 205 in pixelMap[i,j]:
           pixelMap[i,j] = (0,0,0,255)
        pixelsNew[i,j] = pixelMap[i,j]
im.close()
img.show()       
img.save("out.tif") 
img.close()

問題は、結果の画像が単なる真っ白な画面であることです。私は何を間違えましたか?

7
Manshi Sanghai

Ifブロックの後にelseブロックを続けて、基準を満たさない「通常の」ピクセルが元の値を保持するようにします。

from PIL import Image
im = Image.open('leaf.jpg')
pixelMap = im.load()

img = Image.new( im.mode, im.size)
pixelsNew = img.load()
for i in range(img.size[0]):
    for j in range(img.size[1]):
        if 205 in pixelMap[i,j]:
            pixelMap[i,j] = (0,0,0,255)
        else:
            pixelsNew[i,j] = pixelMap[i,j]
img.show()

上記のコードは次の結果をもたらしました。

入力画像

Input

出力画像

Output

8
essbee

あなたは愚かな間違いを犯しました。 6行目に、pixelsNew = img.load()の代わりにpixelsNew = im.load()を記述しました。これで動作するはずです。

from PIL import Image
im = Image.open('nuvfits1.png')
pixelMap = im.load()

img = Image.new( im.mode, im.size)
pixelsNew = img.load()
for i in range(img.size[0]):
    for j in range(img.size[1]):
        if 205 in pixelMap[i,j]:
           pixelMap[i,j] = (0,0,0,255)
        pixelsNew[i,j] = pixelMap[i,j]
im.close()
img.show()       
img.save("out.tif") 
img.close()
3
sidd607

基本的に、ノイズを除去した新しい画像が必要です。これは、pixelsNewです。したがって、pixelMap _if 205 in pixelMap[i,j]_でそのようなケースを見つけた場合は、pixelsNew pixelNew[i,j] = (0, 0, 0, 255)で対応する値を0に設定します。そうでない場合は、pixelMap _pixelsNew[i,j] = pixelMap[i,j]_からピクセル値をコピーするだけです

_from PIL import Image
im = Image.open('nuvfits1.png')
pixelMap = im.load()

img = Image.new( im.mode, im.size)
pixelsNew = img.load()
for i in range(img.size[0]):
    for j in range(img.size[1]):
        if 205 in pixelMap[i,j]:
            pixelsNew[i,j] = (0,0,0,255)
        else:
            pixelsNew[i,j] = pixelMap[i,j]
im.close()
img.show()       
img.save("out.tif") 
img.close()
_
1
Anjali