Numpy、Python获取图像矩阵及PIL的应用介绍

Numpy、Python获取图像矩阵及PIL的应用介绍

在本文中,我们将介绍如何使用Numpy和Python获取图像矩阵,以及如何在处理图像时使用Python Imaging Library(PIL)。

阅读更多:Numpy 教程

1. 使用Numpy获取图像矩阵

Numpy是一个用于科学计算的Python库,它可以方便地处理数值运算、矩阵操作等问题。在获取图像矩阵时,可以使用scipy中的misc模块的imread函数读取图像文件,并使用matplotlib库将其显示。

from scipy import misc
import matplotlib.pyplot as plt

image_file = "test.jpg"
image_data = misc.imread(image_file)
plt.imshow(image_data)
plt.show()
Python

上述代码中,我们首先导入了scipy中的misc模块和matolotlib库,在读取图像文件时使用了misc模块中的imread函数,并将读取得到的图像数据存储在image_data变量中。最后,使用plt.imshow()函数将图像显示出来。

2. 使用Python获取图像矩阵

除了使用Numpy,Python内置的PIL库也可以方便地获取图像矩阵。以下是一个简单的示例:

from PIL import Image

image_file = "test.jpg"
image_data = Image.open(image_file)
image_matrix = image_data.load()
print(image_matrix)
Python

在上面的示例中,我们首先导入了PIL库中的Image模块,然后使用Image.open()函数打开了一张名为test.jpg的图片,并使用load()方法将其转化为图像矩阵。通过print函数,我们可以查看获取到的图像矩阵。

3. PIL图像处理

PIL库提供了众多的图像处理功能,以下是几个常用的处理,包括:

3.1 图像旋转

使用PIL库提供的rotate()方法对图像进行旋转处理:

from PIL import Image

image_file = "test.jpg"
image_data = Image.open(image_file)
image_data.rotate(45).show() 
Python

在上述示例中,我们定义了一个45度的旋转角度,并使用rotate()方法对图像进行旋转,并使用show()方法显示旋转后的图像结果。

3.2 图像缩放

使用PIL库提供的resize()方法对图像进行缩放处理:

from PIL import Image

image_file = "test.jpg"
image_data = Image.open(image_file)
width, height = image_data.size
image_data.resize((int(width*0.5), int(height*0.5))).show() 
Python

在上述示例中,我们定义了1/2的缩放比例,并使用resize()方法对图像进行缩放处理,并使用show()方法显示缩放后的图像结果。

3.3 图像滤波

PIL库提供了众多的滤波函数,以下是使用较多的高斯滤波、中值滤波和Sobel锐化滤波:

from PIL import Image, ImageFilter
import numpy as np

# 高斯滤波
image_file = "test.jpg"
image_data = Image.open(image_file)
image_data.filter(ImageFilter.GaussianBlur(radius=2)).show()

# 中值滤波
image_file = "test.jpg"
image_data = Image.open(image_file)
image_data.filter(ImageFilter.MedianFilter(size=3)).show()

# Sobel锐化滤波
image_file = "test.jpg"
image_data = Image.open(image_file).convert('L')
x = np.array([[1, 0, -1], [2, 0, -2], [1, 0, -1]]) # 输入横向卷积核
Image.fromarray(np.abs(image_data.filter(ImageFilter.Kernel((3,3), x))).astype(np.uint8)).show()
Python

在上述示例中,我们使用了不同的滤波函数,其中高斯滤波使用的是GaussianBlur()函数,中值滤波使用的是MedianFilter()函数,而Sobel锐化滤波则使用了自定义的卷积核。

4. PIL图像生成

除了对已有的图像进行处理外,PIL还可以用于生成新的图像,以下是几个常用的生成方法:

4.1 文字生成

使用PIL库提供的ImageDraw模块和ImageFont模块可以方便地生成带有文字的图像:

from PIL import Image, ImageDraw, ImageFont

#创建图像对象
image = Image.new("RGB", (300, 100), (255, 255, 255))
#获取绘制对象
draw = ImageDraw.Draw(image)
#定义字体对象和字体大小
font = ImageFont.truetype(font="arial.ttf",size=50)
#在图像中添加文字
draw.text((80, 20),"Hello, PIL",(0, 0, 0), font=font)
image.show()
Python

在上述示例中,我们首先使用Image.new()方法创建一个300*100的白色图像,然后使用ImageDraw.Draw()方法获取绘图对象,接着使用ImageFont.truetype()方法定义字体和字体大小,最后使用draw.text()方法在图像中添加文字并显示。

4.2 几何图形生成

使用PIL库提供的ImageDraw模块可以方便地生成几何图形,以下是几个常用的几何图形生成方法:

from PIL import Image, ImageDraw

#矩形
image = Image.new("RGB", (300, 300), (255, 255, 255))
draw = ImageDraw.Draw(image)
draw.rectangle((50, 50, 250, 250), outline="red", width=5)
image.show()

#椭圆
image = Image.new("RGB", (300, 300), (255, 255, 255))
draw = ImageDraw.Draw(image)
draw.ellipse((50, 50, 250, 250), outline="blue", width=5)
image.show()

#多边形
image = Image.new("RGB", (300, 300), (255, 255, 255))
draw = ImageDraw.Draw(image)
draw.polygon([(150, 150), (100, 200), (200, 200)], outline="green", width=5)
image.show()
Python

在上述示例中,我们分别使用了Draw.rectangle()函数绘制了一个矩形,Draw.ellipse()函数绘制了一个椭圆,Draw.polygon()函数绘制了一个多边形,并使用show()方法显示生成的图像。

总结

本文介绍了如何使用Numpy和Python获取图像矩阵,以及如何在处理图像时使用PIL库,包括对图像的处理和生成。使用PIL库可以方便地对图像进行各种处理和生成,而使用Numpy和Python获取图像矩阵可以为后续的图像分析和处理提供基础。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册