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和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
Python排序搜索基本算法之选择排序实例分析
Dec 09 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
python3去掉string中的标点符号方法
Jan 22 Python
python视频按帧截取图片工具
Jul 23 Python
Python shutil模块用法实例分析
Oct 02 Python
基于python实现语音录入识别代码实例
Jan 17 Python
Python模块 _winreg操作注册表
Feb 05 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 Python
Python selenium自动化测试模型图解
Apr 15 Python
如何使用 Flask 做一个评论系统
Nov 27 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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
yii框架无限极分类的实现方法
2017/04/08 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
JavaScript不刷新实现浏览器的前进后退功能
2014/11/05 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
Vue常用的几个指令附完整案例
2018/11/06 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
three.js利用卷积法如何实现物体描边效果
2019/11/27 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
js实现验证码干扰(动态)
2021/02/23 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
党员政治学习材料
2014/05/14 职场文书
分公司经理任命书
2014/06/05 职场文书
思想品德评语大全
2014/12/31 职场文书
教师党员个人自我评价
2015/03/04 职场文书
学生通报表扬范文
2015/05/04 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python