Python实现图片裁剪的两种方式(Pillow和OpenCV)

yipeiwu_com6年前Python基础

在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV。两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧。

首先,我们有一张原始图片,如下图所示:

原始图片

然后,我们利用OpenCV对其进行裁剪,代码如下所示:

import cv2
 
img = cv2.imread("./data/cut/thor.jpg")
print(img.shape)
cropped = img[0:128, 0:512] # 裁剪坐标为[y0:y1, x0:x1]
cv2.imwrite("./data/cut/cv_cut_thor.jpg", cropped)

这里,我们先用imread方法读取待裁剪的图片,然后查看它的shape,shape的输出是(1080, 1920, 3),输出的顺序的是高度、宽度、通道数。之后我们利用数组切片的方式获取需要裁剪的图片范围。这里需要注意的是切片给出的坐标为需要裁剪的图片在原图片上的坐标,顺序为[y0:y1, x0:x1],其中原图的左上角是坐标原点。最后我们用cv2.imwrite()方法将裁剪得到的图片保存到本地(第一个参数为图片名,第二参数为需要保存的图片),如图所示:

OpenCV裁剪所得图片

接下来,我们看一下使用Pillow如何对图片进行裁剪,代码如下所示:

from PIL import Image
 
img = Image.open("./data/cut/thor.jpg")
print(img.size)
cropped = img.crop((0, 0, 512, 128)) # (left, upper, right, lower)
cropped.save("./data/cut/pil_cut_thor.jpg")

首先我们使用open方法读取图片,然后查看它的size(这里的size和OpenCV中的shape是类似的),size的输出是(1920, 1080),也就是图片的宽度和高度。之后我们调用crop方法来对图片进行裁剪,crop需要给定一个box参数,box是一个四元组,元组中元素的顺序是需要裁剪得到的图片在原图中的左、上、右、下坐标,即(left, upper, right, lower)。然后,我们使用save方法保存裁剪得到的图片。如下图所示,Pillow可以同样完成OpenCV裁剪图片的工作。

Pillow裁剪所得图片

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

python使用multiprocessing模块实现带回调函数的异步调用方法

本文实例讲述了python使用multiprocessing模块实现带回调函数的异步调用方法。分享给大家供大家参考。具体分析如下: multipressing模块是python 2.6版...

python实现用户管理系统

本文实例为大家分享了python实现用户管理系统的具体代码,供大家参考,具体内容如下 《python核心编程》第七章练习题第五题 一、题目描述  userpw2.py。下面的...

Python中实现switch功能实例解析

前言 今天在学习python的过程中,发现python没有switch这个语法。于是就想在python中如何才能实现这个功能呢? 正文 本文中我们对switch的使用模拟为正常的数据库的...

Python实现图像几何变换

本文实例讲述了Python实现图像几何变换的方法。分享给大家供大家参考。具体实现方法如下: import Image try: im=Image.open('test.jpg')...

python计算书页码的统计数字问题实例

本文实例讲述了python计算书页码的统计数字问题,是Python程序设计中一个比较典型的应用实例。分享给大家供大家参考。具体如下: 问题描述:对给定页码n,计算出全部页码中分别用到多少...