如何更改图像的像素值?

Man*_*hai 7 python error-handling pixel image-processing python-imaging-library

我正在开发一个图像处理项目,我是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()
Run Code Online (Sandbox Code Playgroud)

问题是,得到的图像只是一个纯白色的屏幕.我做错了什么?

小智 8

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()
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我以下结果:

输入图像

输入

输出图像

产量


sid*_*607 4

你犯了一个愚蠢的错误。在第 6 行中,您编写了 pixelsNew = im.load() 而不是pixelsNew = img.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()
Run Code Online (Sandbox Code Playgroud)