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制作爬虫爬取京东商品评论教程
Dec 16 Python
Tensorflow 查看变量的值方法
Jun 14 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
Django 拆分model和view的实现方法
Aug 16 Python
python统计字符的个数代码实例
Feb 07 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
Keras实现支持masking的Flatten层代码
Jun 16 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
基于python实现图片转字符画代码实例
Sep 04 Python
Python绘制数码晶体管日期
Feb 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
PHP小技巧之函数重载
2014/06/02 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
PHP chr()函数讲解
2019/02/11 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
js实现开关灯效果
2020/03/30 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
python中as用法实例分析
2015/04/30 Python
python 编码规范整理
2018/05/05 Python
python实现两张图片的像素融合
2019/02/23 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
教师的实习鉴定
2013/12/15 职场文书
食品业务员岗位职责
2014/03/18 职场文书
工程材料采购方案
2014/05/18 职场文书
岗位说明书怎么写
2014/07/30 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
股东授权委托书范文
2014/09/13 职场文书
优秀团员事迹材料
2014/12/25 职场文书
Python find()、rfind()方法及作用
2022/12/24 Python