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 代码优化详解
Oct 27 Python
Python使用plotly绘制数据图表的方法
Jul 18 Python
Python内置模块turtle绘图详解
Dec 09 Python
python创造虚拟环境方法总结
Mar 04 Python
Django框架中间件(Middleware)用法实例分析
May 24 Python
opencv导入头文件时报错#include的解决方法
Jul 31 Python
Pytorch中的variable, tensor与numpy相互转化的方法
Oct 10 Python
Python pickle模块实现对象序列化
Nov 22 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
Jan 06 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
TensorFlow固化模型的实现操作
May 26 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 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
建站常用13种PHP开源CMS比较
2009/08/23 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
php获取根域名方法汇总
2014/10/28 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
vue.js删除列表中的一行
2018/06/30 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
python如何实现代码检查
2019/06/28 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
pymysql模块使用简介与示例
2020/11/17 Python
html5简介及新增功能介绍
2020/05/18 HTML / CSS
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
求职简历中个人的自我评价
2013/12/25 职场文书
校园报刊亭的创业计划书
2014/01/02 职场文书
模具专业自荐信
2014/05/29 职场文书
煤矿安全协议书
2014/08/20 职场文书
作风建设年活动总结
2014/08/27 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
欢迎新生标语
2014/10/06 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
班主任培训研修日志
2015/11/13 职场文书
销售会议开幕词
2016/03/04 职场文书
如何Python使用re模块实现okenizer
2022/04/30 Python
配置nginx负载均衡
2022/05/06 Servers