问题是,正如您所说,您的图像是 灰度的 ,因此在此行上:
if pixels[i,j] == (225, 225, 225):
没有像素会等于RGB三元组,
(255,255,255)因为白色像素将仅仅是灰度值,
255而不是RGB三元组。
如果将循环更改为:
if pixels[i,j] == 29: pixels[i,j] = 1 elif pixels[i,j] == 179: pixels [i,j] = 2 else: pixels[i,j] = 0
这是对比结果:
您可能要考虑使用 “ Look Up Table”
或LUT进行转换,因为大量的
if语句可能很笨拙。基本上,图像中的每个像素都会替换为一个新像素,该像素可以通过在表中查找其当前索引来找到。我也这样做很
numpy有趣:
#!/usr/local/bin/python3import numpy as npfrom PIL import Image# Open the input imagePILimage=Image.open("classified.png")# Use numpy to convert the PIL image into a numpy arraynpImage=np.array(PILimage)# Make a LUT (Look-Up Table) to translate image values. Default output value is zero.LUT=np.zeros(256,dtype=np.uint8)LUT[29]=1 # all pixels with value 29, will become 1LUT[179]=2 # all pixels with value 179, will become 2# Transform pixels according to LUT - this line does all the workpixels=LUT[npImage];# Save resulting imageresult=Image.fromarray(pixels)result.save('result.png')结果-拉伸对比度后:
上面我可能有点冗长,所以如果您喜欢更简洁的代码:
import numpy as npfrom PIL import Image# Open the input image as numpy arraynpImage=np.array(Image.open("classified.png"))# Make a LUT (Look-Up Table) to translate image valuesLUT=np.zeros(256,dtype=np.uint8)LUT[29]=1 # all pixels with value 29, will become 1LUT[179]=2 # all pixels with value 179, will become 2# Apply LUT and save resulting imageImage.fromarray(LUT[npImage]).save('result.png')


