如何更改图像的像素值?

时间:2016-07-05 08:14:20

标签: python image-processing error-handling python-imaging-library pixel

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

问题是,结果图像只是纯白色屏幕。我做错了什么?

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

你犯了一个愚蠢的错误。在第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()

答案 2 :(得分:1)

你基本上需要一个去掉噪音的新图像,即pixelNew。 因此,只要在pixelMap if 205 in pixelMap[i,j]中找到这样的情况,就将对应的值设置为0,以像素为单位pixelNew[i,j] = (0, 0, 0, 255)。否则只需复制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()