Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019-10-31 07:05
2739 查看
在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV。两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧。
首先,我们有一张原始图片,如下图所示:
原始图片
然后,我们利用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()方法将裁剪得到的图片保存到本地(第一个参数为图片名,第二参数为需要保存的图片),如图所示:
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裁剪图片的工作。
Pillow裁剪所得图片
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- Python图片裁剪的两种方式——Pillow和OpenCV
- 两种方式实现图片按比例响应式缩放、并自动裁剪的css技巧
- python opencv对图像进行旋转且不裁剪图片的实现方法
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- python 多线程两种实现方式
- 【003】Python实现图片转字符画(pillow 库的使用)
- android带有文字的图片按钮的两种实现方式
- Android平台下使用OpenCV灰度化图片的两种方式
- opencv实现图片的裁剪以及旋转
- 前端实现图片懒加载(lazyload)的两种方式
- [转载]python中package机制的两种实现方式
- 利用Selenium实现图片文件上传的两种方式介绍
- android实现图片闪烁动画效果的两种实现方式(实用性高)
- python实现读取并显示图片的两种方法
- java 实现BufferedImage和ImageReader两种方式获取图片宽高、判断图片类型、获取图片大小工具类代码以及测试响应结果
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
- python实现高速排序算法(两种不同实现方式)
- 图片轮播器的两种实现方式(ScrollView与collectionView)
- 【Python】python 多线程两种实现方式