Errow在python中显示像素数组的图像

时间:2018-01-08 09:14:38

标签: python python-3.x image-processing

我有一个(numpy)像素数组获取为:

''' import numpy and matplotlib '''
image = Image.open('trollface.png', 'r')
width, height = image.size
pixel_values = list(image.getdata())


pixel_values = np.array(pixel_values).reshape((width, height, 3)) # 3 channels RGB
#height, width = len(pixel_values), len(pixel_values[0])

我需要计算此图像的数字负片 -

for y in range(0,height):
   for x in range(0,width):
       R,G,B = pixel_values[x,y]
       pixel_values[x,y] =(255 - R, 255 - G, 255 - B)

尝试在this thread

的帮助下显示上面像素的图像
plt.imshow(np.array(pixel_values).reshape(width,height,3))
plt.show()

但它只显示一个空白(白色)窗口,在CLI中显示this error

1 个答案:

答案 0 :(得分:1)

这里的目标是实现图像的负面转换。

可以使用Image.point方法将像素转换直接应用于R,G,B波段。

image = Image.open('trollface.png')

source = image.split()
r, g, b, a = 0, 1, 2, 3

negate = lambda i: 255 - i

transform = [source[band].point(negate) for band in (r, g, b)]
if len(source) == 4:  # should have 4 bands for images with alpha channel
    transform.append(source[a])  # add alpha channel

out = Image.merge(im.mode, transform)
out.save('negativetrollface.png')

编辑使用OP的程序,你有:

im = Image.open('trollface.png')

w, h = im.size

arr = np.array(im)
original_shape = arr.shape


arr_to_dim = arr.reshape((w, h, 4))

# Note that this is expensive.
# Always take advantage of array manipulation implemented in the C bindings
for x in range(0, w):
    for y in range(0, h):
        r, g, b, a = arr_to_dim[x, y]
        arr_to_dim[x, y] = np.array([255 - r, 255 - g, 255 - b, a])


dim_to_arr = arr_to_dim.reshape(original_shape)

im = Image.fromarray(dim_to_arr)
out.save('negativetrollface.png')