Python -- 改变图像的RGB值并保存为图像
Python -- change the RGB values of the image and save as a image
我已经可以读取图像的每个像素的 RGB,但我不知道如何将 RGB 值更改为一半并提前保存为 image.Thank。
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]
如果您安装了 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
有很多方法可以用 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 中的嵌套循环快得多。
您可以在 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)
获取像素的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)
我已经可以读取图像的每个像素的 RGB,但我不知道如何将 RGB 值更改为一半并提前保存为 image.Thank。
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]
如果您安装了 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
有很多方法可以用 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 中的嵌套循环快得多。
您可以在 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)
获取像素的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)