为什么在 Python 中加载图像时像素值会反转和转置?
Why pixel values inverted and transposed on loading image in Python?
我正在尝试访问灰度图像的像素。在加载它时,我发现像素值被转置以及新图像 'img.png' 的颜色被反转。但理想情况下,'img.png' 应与 'cat.png' 相同。他们为什么不同?
import numpy as np
from PIL import Image
img=Image.open('cat.png')
pix=img.load()
res_list=[]
img_data= np.zeros((128, 128), dtype=np.uint8)
for i in range(img.size[0]):
for j in range(img.size[1]):
img_data[i,j]=pix[i,j]
img=Image.fromarray(img_data)
img.save('img.png')
此外,当我尝试将 img_data 更新为:
img_data[i,j]=255-pix[i,j]
它仍然不是实际图像,而是非常白的图像。如何恢复原始图像?
图像是:
正确代码:
img_data[j,i]=pix[i,j]
只需在 img_data
中交换 i
和 j
。
我同意 gelezko 转换索引顺序的建议。这样就解决了换位问题。
出现颜色问题是因为输入图像实际上不是灰度图像。当我尝试 print img.mode
时,我得到的是 "P" 而不是 "L"。在对像素进行任何操作之前尝试显式转换为 L。
img=Image.open('cat.png')
img = img.convert("L")
pix=img.load()
现在你应该得到一个方向正确且颜色正确的图像:
我正在尝试访问灰度图像的像素。在加载它时,我发现像素值被转置以及新图像 'img.png' 的颜色被反转。但理想情况下,'img.png' 应与 'cat.png' 相同。他们为什么不同?
import numpy as np from PIL import Image img=Image.open('cat.png') pix=img.load() res_list=[] img_data= np.zeros((128, 128), dtype=np.uint8) for i in range(img.size[0]): for j in range(img.size[1]): img_data[i,j]=pix[i,j] img=Image.fromarray(img_data) img.save('img.png')
此外,当我尝试将 img_data 更新为:
img_data[i,j]=255-pix[i,j]
它仍然不是实际图像,而是非常白的图像。如何恢复原始图像?
图像是:
正确代码:
img_data[j,i]=pix[i,j]
只需在 img_data
中交换 i
和 j
。
我同意 gelezko 转换索引顺序的建议。这样就解决了换位问题。
出现颜色问题是因为输入图像实际上不是灰度图像。当我尝试 print img.mode
时,我得到的是 "P" 而不是 "L"。在对像素进行任何操作之前尝试显式转换为 L。
img=Image.open('cat.png')
img = img.convert("L")
pix=img.load()
现在你应该得到一个方向正确且颜色正确的图像: