Python 如何更改图像的像素值?
我正在从事一个图像处理项目,我是Python和使用PIL的初学者。任何帮助都将不胜感激 所以,我现在做的是,我有一个有星星和噪音的空间图像。我想做的是只保留较亮的像素,过滤掉较暗的像素。现在,这是我消除噪音的基本步骤。 在研究了图像数据之后,我发现205的值很可能就是我想要保持阈值的值 因此,我在代码中所做的是,打开图像并将包含205的像素值更改为黑色。 以下是相同的代码:Python 如何更改图像的像素值?,python,image-processing,error-handling,python-imaging-library,pixel,Python,Image Processing,Error Handling,Python Imaging Library,Pixel,我正在从事一个图像处理项目,我是Python和使用PIL的初学者。任何帮助都将不胜感激 所以,我现在做的是,我有一个有星星和噪音的空间图像。我想做的是只保留较亮的像素,过滤掉较暗的像素。现在,这是我消除噪音的基本步骤。 在研究了图像数据之后,我发现205的值很可能就是我想要保持阈值的值 因此,我在代码中所做的是,打开图像并将包含205的像素值更改为黑色。 以下是相同的代码: from PIL import Image im = Image.open('nuvfits1.png') pixelMa
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()
问题是,生成的图像只是一个普通的白色屏幕。我做错了什么?你犯了一个愚蠢的错误。在第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()
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()
上面的代码给出了以下结果:
输入图像
输出图像
基本上,您需要一张去除了噪声的新图像,即像素新图像。 因此,每当您在pixelMap
中发现这样的情况时,如果在pixelMap[i,j]
中有205,则在pixelsNewpixelNew[i,j]=(0,0,0,255)
中设置相应的值为0。否则,只需从pixelMappixelsNew[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()
谢谢你的建议。我这么做了,但是现在我又得到了同样的图像,不是一个编辑过的图像。你应该简单地解释一下你的代码。完成!请现在检查。