为什么在 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 中交换 ij

我同意 gelezko 转换索引顺序的建议。这样就解决了换位问题。

出现颜色问题是因为输入图像实际上不是灰度图像。当我尝试 print img.mode 时,我得到的是 "P" 而不是 "L"。在对像素进行任何操作之前尝试显式转换为 L。

img=Image.open('cat.png')
img = img.convert("L")
pix=img.load()

现在你应该得到一个方向正确且颜色正确的图像: