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中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
Oct 23 Python
python检测远程udp端口是否打开的方法
Mar 14 Python
python threading模块操作多线程介绍
Apr 08 Python
分享几道你可能遇到的python面试题
Jul 24 Python
TensorFLow用Saver保存和恢复变量
Mar 10 Python
Python3中的json模块使用详解
May 05 Python
Python带动态参数功能的sqlite工具类
May 26 Python
在Python中分别打印列表中的每一个元素方法
Nov 07 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
Python对列表的操作知识点详解
Aug 20 Python
Python(PyS60)实现简单语音整点报时
Nov 18 Python
Pytorch之保存读取模型实例
Dec 30 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网站提速三大“软”招
2006/10/09 PHP
PHP编程之高级技巧——利用Mysql函数
2006/10/09 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
如何利用PHP执行.SQL文件
2013/07/05 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
容易被忽略的JS脚本特性
2011/09/13 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
js简单抽奖代码
2015/01/16 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
详解JavaScript树结构
2017/01/09 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
工商管理实习自我鉴定
2013/09/28 职场文书
三年大学自我鉴定
2014/01/16 职场文书
消防应急演练方案
2014/02/12 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python