繁体   English   中英

在 Python 中反转 RGB 图像的像素

[英]Inverting pixels of an RGB image in Python

我正在尝试反转 RGB 图像的像素。 即,简单地从255减去每个像素的每个通道(红色、绿色、蓝色)的强度值。

到目前为止,我有以下几点:

from PIL import Image

im = Image.open('xyz.png')
rgb_im = im.convert('RGB')
width, height = im.size

output_im = Image.new('RGB', (width,height))

for w in range(width):
    for h in range(height):
        r,g,b = rgb_im.getpixel((w,h))
        output_r = 255 - r
        output_g = 255 - g
        output_b = 255 - b
        output_im[w,h] = (output_r, output_g, output_b)

当我运行上述脚本时,出现以下错误:

Traceback (most recent call last):
  File "image_inverse.py", line 31, in <module>
    output_im[w,h] = (output_r, output_g, output_b)
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 528, in __getattr__
    raise AttributeError(name)
AttributeError: __setitem__

我该如何解决这个问题?

谢谢。

我想如果图像是一个numpy数组,则可以使用矢量化操作

from PIL import Image
im = Image.open('xyz.png')
im = 255 - im

您可以使用img.putpixel在每个像素处分配r,g,b,a值-

from PIL import Image

im = Image.open('xyz.png')
rgb_im = im.convert('RGB')
width, height = im.size

output_im = Image.new('RGB', (width,height))

for w in range(width):
    for h in range(height):
        r,g,b = rgb_im.getpixel((w,h))
        output_r = 255 - r
        output_g = 255 - g
        output_b = 255 - b
        alpha = 1
        output_im.putpixel((w, h), (output_r, output_g, output_b, alpha))

将图片转成numpy数组,一行即可对所有二维数组进行操作

在此处输入图片说明

from PIL import Image
import numpy as np

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

# Convert Image to numpy array
image_array = np.array(image)

print(image_array.shape)
# Prints something like: (1024, 1024, 4)
# So we have 4 two-dimensional arrays: R, G, B, and the alpha channel

# Do `255 - x` for every element in the first 3 two-dimensional arrays: R, G, B
# Keep the 4th array (alpha channel) untouched
image_array[:, :, :3] = 255 - image_array[:, :, :3]

# Convert numpy array back to Image
inverted_image = Image.fromarray(image_array)

inverted_image.save('inverted.png')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM