如何用Python操作图像的像素值

如何用Python操作图像的像素值

众所周知,彩色图像是各种像素的集合。如果我们改变像素值,图像将变成不同颜色的图像。手动完成这项繁琐的任务是非常可怕的,因为一张图像可能包含数百万个像素。因此,我们将写一个Python脚本来轻松完成这项任务。

在开发图像数据的预测模型时,我们有时需要对图像进行操作。为此,Python有一个神奇的库,名为Python Imaging Library(PIL)。这个库包含了一些方法,通过这些方法我们可以提取图像的像素图,并且在循环的帮助下我们可以遍历每个像素,并根据我们的需要改变其像素值。像素是图像中最小的基本组成部分,同样,像素图可以被认为是一个代表图像的像素矩阵。

步骤

1.首先,我们需要一个图像文件作为输入。这个图像文件可以通过Image.new()方法创建,也可以通过Image.open()方法从本地机器导入。这两种情况在下面的例子中都有显示。(不是必须的,但为了方便起见,我们将图像保存为 “input.png”,特别是为了看一看其中的区别。)
2.其次,我们需要在Image.load()方法的帮助下提取输入图像的像素图(像素值的矩阵),这样我们就可以操作我们想要的像素。Image.size方法返回图像(像素图或矩阵)的宽度和高度(列和行)。然后在循环的帮助下,我们将迭代并改变我们所需的像素值。
3.最后,在更新或改变像素值后,我们将得到输出图像。(同样不是强制性的,但为了方便,我们将在Image.save()方法的帮助下把输出图像保存为 “output.png”。 我们还可以使用Image.show()方法在输出屏幕上看到图像。

例子1:使用本地机器的图像,并将其一半变成灰度图像

将一个图像变为灰度图像的平均公式。

G = (R+G+B) / 3

上述公式在理论上是正确的,但有一个更完善的公式(加权法,也叫光度法,根据红、绿、蓝的波长来衡量)如下。

G = (0.299R + 0.587G + 0.114B)

输入图片:

如何用Python操作图像的像素值?

from PIL import Image
  
# Import an image from directory:
input_image = Image.open("gfg.png")
  
# Extracting pixel map:
pixel_map = input_image.load()
  
# Extracting the width and height 
# of the image:
width, height = input_image.size
  
# taking half of the width:
for i in range(width//2):
    for j in range(height):
        
        # getting the RGB pixel value.
        r, g, b, p = input_image.getpixel((i, j))
          
        # Apply formula of grayscale:
        grayscale = (0.299*r + 0.587*g + 0.114*b)
  
        # setting the pixel value.
        pixel_map[i, j] = (int(grayscale), int(grayscale), int(grayscale))
  
# Saving the final output
# as "grayscale.png":
input_image.save("grayscale", format="png")
  
# use input_image.show() to see the image on the
# output screen.

输出:

如何用Python操作图像的像素值?

输出图像。

注意:这里一半的图像已经被转换为灰度,但完整的图像可以用同样的代码完成,只需将(width/2)改为(width)即可。要了解更多的信息,请参考Image.getpixel() 方法

例子2:操纵像素值

输入图片:

如何用Python操作图像的像素值?

from PIL import Image
  
# Create an image as input:
input_image = Image.new(mode="RGB", size=(400, 400),
                        color="blue")
  
# save the image as "input.png"
#(not mandatory)
input_image.save("input", format="png")
  
# Extracting pixel map:
pixel_map = input_image.load()
  
# Extracting the width and height
# of the image:
width, height = input_image.size
z = 100
for i in range(width):
    for j in range(height):
        
        # the following if part will create
        # a square with color orange
        if((i >= z and i <= width-z) and (j >= z and j <= height-z)):
            
            # RGB value of orange.
            pixel_map[i, j] = (255, 165, 0)
  
        # the following else part will fill the
        # rest part with color light salmon.
        else:
            
            # RGB value of light salmon.
            pixel_map[i, j] = (255, 160, 122)
  
# The following loop will create a cross
# of color blue.
for i in range(width):
    
    # RGB value of Blue.
    pixel_map[i, i] = (0, 0, 255)
    pixel_map[i, width-i-1] = (0, 0, 255)
  
# Saving the final output
# as "output.png":
input_image.save("output", format="png")
  
# use input_image.show() to see the image on the
# output screen.

输出:

如何用Python操作图像的像素值?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程