【问题标题】:Python -- change the RGB values of the image and save as a imagePython——改变图像的RGB值并保存为图像
【发布时间】:2018-03-14 14:31:42
【问题描述】:

我已经可以读取图像的每个像素的 RGB,但我不知道如何将 RGB 的值更改为一半并保存为图像。提前谢谢。

from PIL  import *

def half_pixel(jpg):
  im=Image.open(jpg)
  img=im.load()
  print(im.size)
  [xs,ys]=im.size  #width*height

# Examine every pixel in im
  for x in range(0,xs):
     for y in range(0,ys):
        #get the RGB color of the pixel
        [r,g,b]=img[x,y] 

【问题讨论】:

标签: python image rgb pillow


【解决方案1】:
  • 获取像素的RGB颜色

    [r,g,b]=img.getpixel((x, y))
    
  • 更新新的 rgb 值

     r = r + rtint
     g = g + gtint
     b = b + btint
     value = (r,g,b)
    
  • 将新的 rgb 值分配回像素

    img.putpixel((x, y), value)
    

【讨论】:

  • 为什么人们不赞成这个?这是涵盖每个颜色通道具有不同系数的情况的答案。
【解决方案2】:

Pillow 有很多方法可以做到这一点。例如,您可以使用Image.point

# Function to map over each channel (r, g, b) on each pixel in the image
def change_to_a_half(val):
    return val // 2

im = Image.open('./imagefile.jpg')
im.point(change_to_a_half)

该函数实际上只调用了 256 次(假设颜色深度为 8 位),然后将生成的贴图应用于像素。这比在 python 中运行嵌套循环要快得多。

【讨论】:

    【解决方案3】:

    您可以在 PIL 中做任何您想做的事情。

    如果你想将每个像素的值减少一半,你可以这样做:

    import PIL
    
    im = PIL.Image.open('input_filename.jpg')
    im.point(lambda x: x * .5)
    im.save('output_filename.jpg')
    

    您可以在此处查看有关点操作的更多信息:https://pillow.readthedocs.io/en/latest/handbook/tutorial.html#point-operations

    此外,您可以进行任意像素操作: im[row, col] = (r, g, b)

    【讨论】:

      【解决方案4】:

      如果您安装了 Numpy 和 Matplotlib,一种解决方案是将您的图像转换为 numpy 数组,然后例如使用 matplotlib 保存图像。

      import matplotlib.pyplot as plt
      import numpy as np
      from PIL import Image
      
      img = Image.open(jpg)
      arr = np.array(img)
      arr = arr/2 # divide each pixel in each channel by two 
      plt.imsave('output.png', arr.astype(np.uint8))
      

      请注意,您需要有一个版本的 PIL >= 1.1.6

      【讨论】:

      • 您还需要安装 numpy 和 matlibplot。因此,如果他们还没有使用这些库,这不是最简单的解决方案。
      • 是的,您是绝对正确的,会将这些信息编辑到帖子中。我猜这最终是个人喜好。我喜欢尽可能多地呆在 numpy 中,发现 PIL 库真的很笨拙。
      猜你喜欢
      • 2017-06-28
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多