如何使用Numpy模块裁剪图片

  • Post category:Python

使用Numpy模块裁剪图片的完整攻略如下:

前置条件

在使用Numpy模块裁剪图片前,需要先确保已经安装好了Numpy模块。如果尚未安装,可以通过以下命令在终端或命令提示符中安装:

pip install numpy

步骤

  1. 读取图片并转换为Numpy数组

在Numpy模块中,使用 numpy.array() 函数将图片文件读取为Numpy数组。在读取前,需要先使用PIL模块将图片转换为PIL Image对象。示例代码如下:

import numpy as np
from PIL import Image

# 读取图片文件,并将其转换为Numpy数组
img = Image.open('image.jpg')
img_np = np.array(img)

在以上示例中,将名为 image.jpg 的图片文件读取为PIL Image对象,然后通过 numpy.array() 函数转换为Numpy数组,并存储在变量 img_np 中。

  1. 剪裁图片

在Numpy模块中,可以使用Python切片语法对Numpy数组进行剪裁。例如,通过以下代码可以将图像裁剪为其宽度的一半:

# 剪裁图片,使其宽度为原来的一半
img_cropped = img_np[:, :img_np.shape[1]//2, :]

在以上示例中,使用切片语法对 img_np 进行了剪裁,其中使用 [:, :img_np.shape[1]//2, :] 表示将数组的第二个维度(即宽度)分割为两个部分,取前半部分。剪裁得到的新数组存储在 img_cropped 中。注意,第一个 : 表示对第一个维度(即高度)不做操作,而最后一个 : 表示对第三个维度(即RGB通道)也不做操作。

  1. 保存新图像

使用 PIL.Image.fromarray() 将裁剪得到的Numpy数组保存为新图像文件。示例代码如下:

# 将裁剪得到的新数组保存为新图片文件
img_cropped_pil = Image.fromarray(img_cropped)
img_cropped_pil.save('cropped_image.jpg')

以上示例中,使用 Image.fromarray() 函数将 img_cropped 转换为PIL Image对象,然后使用 save() 方法将其保存为名为 cropped_image.jpg 的图片文件。

示例

下面给出两个使用Numpy模块裁剪图片的示例。

示例1:将图片裁剪为正方形

import numpy as np
from PIL import Image

# 读取图片文件,并将其转换为Numpy数组
img = Image.open('image.jpg')
img_np = np.array(img)

# 剪裁图片,使其成为正方形
min_dim = min(img_np.shape[0], img_np.shape[1])
start_x = img_np.shape[1]//2 - min_dim//2
start_y = img_np.shape[0]//2 - min_dim//2
img_cropped = img_np[start_y:start_y+min_dim, start_x:start_x+min_dim, :]

# 保存新的图片文件
img_cropped_pil = Image.fromarray(img_cropped)
img_cropped_pil.save('cropped_image.jpg')

以上代码将名为 image.jpg 的图片文件读取为PIL Image对象,然后将其转换为Numpy数组。对数组进行剪裁,使其成为正方形,然后将其保存为名为 cropped_image.jpg 的新图片文件。

示例2:将图片垂直居中

import numpy as np
from PIL import Image

# 读取图片文件,并将其转换为Numpy数组
img = Image.open('image.jpg')
img_np = np.array(img)

# 剪裁图片,使其垂直居中
cut_start = img_np.shape[0]//2 - img_np.shape[1]//4
cut_end = img_np.shape[0]//2 + img_np.shape[1]//4
img_cropped = img_np[cut_start:cut_end, :, :]

# 保存新的图片文件
img_cropped_pil = Image.fromarray(img_cropped)
img_cropped_pil.save('cropped_image.jpg')

以上代码从名为 image.jpg 的图片文件中读取图片,并将其转换为Numpy数组。对数组进行剪裁,使其垂直居中,即保留高度为图片宽度四分之一的部分。最后将剪裁得到的新数组保存为名为 cropped_image.jpg 的新图片文件。