Python - 更改图像的RGB值并另存为图像

时间:2018-03-14 14:31:43

标签: python image rgb pillow

我可以阅读每个像素'图像的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] 

4 个答案:

答案 0 :(得分:1)

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中运行嵌套循环要快得多。

答案 1 :(得分:0)

如果安装了Numpy和Matplotlib,一种解决方案是将图像转换为numpy数组,然后将其转换为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

的版本

答案 2 :(得分:0)

您可以在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)

答案 3 :(得分:-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)