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


Posted in Python onOctober 30, 2019

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

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

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

原始图片

然后,我们利用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()方法将裁剪得到的图片保存到本地(第一个参数为图片名,第二参数为需要保存的图片),如图所示:

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

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裁剪图片的工作。

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

Pillow裁剪所得图片

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中去空格函数的用法
Aug 21 Python
python统计一个文本中重复行数的方法
Nov 19 Python
分享一下Python 开发者节省时间的10个方法
Oct 02 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
python利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
Jun 27 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 #Python
Python OpenCV图像指定区域裁剪的实现
Oct 30 #Python
使用Python刷淘宝喵币(低阶入门版)
Oct 30 #Python
Python自动化完成tb喵币任务的操作方法
Oct 30 #Python
Flask框架 CSRF 保护实现方法详解
Oct 30 #Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
Oct 30 #Python
python基于K-means聚类算法的图像分割
Oct 30 #Python
You might like
php for 循环语句使用方法详细说明
2010/05/09 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
python中线程和进程有何区别
2020/06/17 Python
python中upper是做什么用的
2020/07/20 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
HTML5 Canvas基本线条绘制的实例教程
2016/03/17 HTML / CSS
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
法学毕业生自荐信
2013/11/13 职场文书
高级护理专业毕业生推荐信
2013/12/25 职场文书
个人职业生涯规划书1500字
2013/12/31 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
干部个人对照检查材料
2014/08/25 职场文书
2014年医生工作总结
2014/11/21 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python