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绘制数据的瀑布图的教程
Apr 07 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
Python定时发送天气预报邮件代码实例
Sep 09 Python
python海龟绘图之画国旗实例代码
Nov 11 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 Python
Python制作简单的剪刀石头布游戏
Dec 10 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 06 Python
tensorflow学习笔记之tfrecord文件的生成与读取
Mar 31 Python
高考要来啦!用Python爬取历年高考数据并分析
Jun 03 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 disk_free_space 返回目录可用空间
2010/05/10 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
vue实现评价星星功能
2020/06/30 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
简单了解python关系(比较)运算符
2019/07/08 Python
Python sys模块常用方法解析
2020/02/20 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
党员国庆节演讲稿范文2014
2014/09/21 职场文书
小学教育见习报告
2014/10/31 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
党校毕业个人总结
2015/02/28 职场文书
党员自我评价范文2015
2015/03/03 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
电影圆明园观后感
2015/06/03 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
Nginx内网单机反向代理的实现
2021/11/07 Servers
Go语言 详解net的tcp服务
2022/04/14 Golang