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的while循环中使用else以及循环嵌套的用法
Oct 14 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
Python3实现取图片中特定的像素替换指定的颜色示例
Jan 24 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
如何用 Python 子进程关闭 Excel 自动化中的弹窗
May 07 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 文件上传代码(限制jpg文件)
2010/01/05 PHP
php设计模式 Visitor 访问者模式
2011/06/28 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
DOM下的节点属性和操作小结
2009/05/14 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
python 正确保留多位小数的实例
2018/07/16 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
优秀语文教师事迹
2014/05/18 职场文书
个人投资合作协议书
2014/10/12 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
通用员工手册范本
2015/05/14 职场文书
预备党员转正党小组意见
2015/06/01 职场文书