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 25 Python
Python使用PIL模块生成随机验证码
Nov 21 Python
python Opencv将图片转为字符画
Feb 19 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
python 修改本地网络配置的方法
Aug 14 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
Pytorch之finetune使用详解
Jan 18 Python
python实现滑雪者小游戏
Feb 22 Python
Python Dataframe常见索引方式详解
May 27 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
python本地文件服务器实例教程
May 02 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
CURL状态码列表(详细)
2013/06/27 PHP
php之curl设置超时实例
2014/11/03 PHP
PHP实现合并discuz用户
2015/08/05 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
个人委托书范本
2014/04/02 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书