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的*args和**kwargs用法
Nov 01 Python
Python的装饰器使用详解
Jun 26 Python
python中map()函数的使用方法示例
Sep 29 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
Python pandas用法最全整理
Aug 04 Python
python打包成so文件过程解析
Sep 28 Python
浅谈Python程序的错误:变量未定义
Jun 02 Python
Django --Xadmin 判断登录者身份实例
Jul 03 Python
jupyter使用自动补全和切换默认浏览器的方法
Nov 18 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实现处理输入转义字符的代码
2015/11/08 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
axios学习教程全攻略
2017/03/26 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
vuex 的简单使用
2018/03/22 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
transform python环境快速配置方法
2018/09/27 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
django框架auth模块用法实例详解
2019/12/10 Python
内业资料员岗位职责
2014/01/04 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
教师个人读书活动总结
2014/07/08 职场文书
小学庆六一活动总结
2014/08/28 职场文书
贫困证明模板(3篇)
2014/09/16 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
优秀班组事迹材料
2014/12/24 职场文书
安全承诺书
2015/01/19 职场文书
党员承诺书格式范文
2015/04/28 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书