为什么在Python中加载图像时像素值被反转和转置?

时间:2016-03-01 17:39:56

标签: python image python-imaging-library

我正在尝试访问灰度图像的像素。在加载它时,我发现像素值被转置以及新图像的颜色' 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]

仍然不是实际图像,而是非常白的图像。如何恢复原始图像?

图像是: enter image description here enter image description here

2 个答案:

答案 0 :(得分:2)

我同意gelezko关于切换索引顺序的建议。这将解决换位问题。

由于输入图像实际上不是灰度,因此出现颜色问题。当我尝试printf("%ld \n", strlen(ss)); 时,我得到“P”而不是“L”。在对像素进行任何处理之前,请尝试显式转换为L.

print img.mode

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

enter image description here

答案 1 :(得分:1)

正确代码:

img_data[j,i]=pix[i,j]

只需在i中交换jimg_data