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 linecache.getline()读取文件中特定一行的脚本
Sep 06 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
python读取各种文件数据方法解析
Dec 29 Python
如何使用Python标准库进行性能测试
Jun 25 Python
python 随机生成10位数密码的实现代码
Jun 27 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
Feb 29 Python
使用Django清空数据库并重新生成
Apr 03 Python
python查看矩阵的行列号以及维数方式
May 22 Python
python如何实现word批量转HTML
Sep 30 Python
Python Django模型详解
Oct 05 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
地摊中国 - 珍藏老照片
2020/08/18 杂记
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
基于php判断客户端类型
2016/10/14 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
js获取图片宽高的方法
2015/11/25 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
JS中async/await实现异步调用的方法
2019/08/28 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
python线程池threadpool使用篇
2018/04/27 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
幼儿园教师辞职信
2014/01/18 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书
装修公司管理制度
2015/08/05 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
Python  lambda匿名函数和三元运算符
2022/04/19 Python