本文参考Python图片裁剪的两种方式——Pillow和OpenCV并进行了一些更新
感谢作者:hfutdog

在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV。两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧。

OpenCV对其进行裁剪

首先,我们有一张原始图片,如下图所示:

然后,我们利用OpenCV对其进行裁剪,代码如下所示:

import cv2img = cv2.imread("./data/cut/thor.jpg")
print(img.shape) # (1080, 1920, 3)
cropped = img[0:128, 0:512]  # 裁剪坐标为[y0:y1, x0:x1]
cv2.imwrite("./data/cut/cv_cut_thor.jpg", cropped)#上面是正向,即从左上角开始截图,下面的是从右下角开始反向截图
import cv2img = cv2.imread("./data/cut/thor.jpg")
cropped = img[-128:-1, 0:512]
cv2.imwrite("./data/cut/leftlower_cv_cut.jpg", cropped)


这里,我们先用imread方法读取待裁剪的图片,然后查看它的shape,shape的输出是(1080, 1920, 3),输出的顺序的是高度、宽度、通道数。之后我们利用数组切片的方式获取需要裁剪的图片范围。这里需要注意的是切片给出的坐标为需要裁剪的图片在原图片上的坐标,顺序为[y0:y1, x0:x1],其中原图的左上角是坐标原点。最后我们用cv2.imwrite()方法将裁剪得到的图片保存到本地(第一个参数为图片名,第二参数为需要保存的图片),如图所示:

Pillow对其进行裁剪

接下来,我们看一下使用Pillow如何对图片进行裁剪,代码如下所示:

from PIL import Imageimg = Image.open("./data/cut/thor.jpg")
print(img.size) #(1920, 1080)
cropped = img.crop((0, 0, 512, 128))  # (left, upper, right, lower)
cropped.save("./data/cut/pil_cut_thor.jpg")#上面是正向,即从左上角开始截图,下面的是从右下角开始反向截图
from PIL import Imageimg = Image.open("./data/cut/thor.jpg")
_width, _height = img.size
cropped = img.crop((0, _height-128, 512, _height))  # (left, upper, right, lower)
cropped.save("./data/cut/leftlower_pil_cut.jpg")


首先我们使用open方法读取图片,然后查看它的size(这里的size和OpenCV中的shape是类似的),size的输出是(1920, 1080),也就是图片的宽度和高度。之后我们调用crop方法来对图片进行裁剪,crop需要给定一个box参数,box是一个四元组,元组中元素的顺序是需要裁剪得到的图片在原图中的左、上、右、下坐标,即(left, upper, right, lower)。然后,我们使用save方法保存裁剪得到的图片。如下图所示,Pillow可以同样完成OpenCV裁剪图片的工作。

另外使用PIL crop截取图像这里容易报错:AttributeError: '_idat' object has no attribute 'fileno'
During handling of the above exception, another exception occurred:

一般这样子的错误都是(left, upper, right, lower)-tuple 坐标值不对
要注意右边(right)下边(lower)都要分别比左边(left)和上边(upper)大,否则就会报上面的错误.
其实可以理解为矩形对角线截图,在坐标系里面,第一个点的坐标比第二个点的坐标值大。
如下图:

Python图片裁剪的两种方式——Pillow和OpenCV相关推荐

  1. Python:实现图片裁剪的两种方式——Pillow和OpenCV

    原文:https://blog.csdn.net/hfutdog/article/details/82351549 在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还 ...

  2. python opencv 裁剪图片_Python图片裁剪的两种方式——Pillow和OpenCV

    在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV.两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧. OpenCV ...

  3. Python实现图片裁剪的两种方式——Pillow和OpenCV

    在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV.两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧. 首先,我们有 ...

  4. Python实现屏幕截图的两种方式

    Python实现屏幕截图的两种方式 使用windows API 使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释. 一.Python调用windows API实现屏幕截图 好处 ...

  5. iOS之实现图片裁剪的几种方式

    iOS之实现图片裁剪的几种方式 1.使用CGImageCreateWithImageInRect函数 CGImageCreateWithImageInRect函数是属于Core Graphics Fr ...

  6. Py之qrcode:调用python的qrcode库两种方式生成二维码、带logo的二维码

    Py之qrcode:调用python的qrcode库两种方式生成二维码.带logo的二维码 目录 python编程实现生成二维码 1.第一种方式-纯文本 2.第二种方式-带logo

  7. 运用python的方式_对Python使用mfcc的两种方式详解

    1.Librosa import librosa filepath = "/Users/birenjianmo/Desktop/learn/librosa/mp3/in.wav" ...

  8. Android点击图片随机,android 设置图片随机出现-两种方式

    android 设置图片随机出现-两种方式, 第一种方式:得到图片对应的Drawable实例,通过setImageDrawable(drawable)实现 //ImageView对应的id ivBg ...

  9. python解释器在哪里_详解查看Python解释器路径的两种方式

    进入python的安装目录, 查看python解释器 进入bin目录 # ls python(看一下是否有python解释器版本) # pwd (查看当前目录) 复制当前目录即可 1. 通过脚本查看 ...

最新文章

  1. PIX failover+负载
  2. Drug Target Review | 开发一种算法来预测药物性肝损伤
  3. 随机森林RandomForest回归生物标记预测时间序列
  4. 高斯混合模型(GaussianMixture Model, GMM)聚类、可视化最优协方差形式、通过TSNE进行结果可视化分析、抽取核心特征因子
  5. CI/CD — Overview
  6. Android React Native 笔记(一):基础
  7. linux命令之查看程序动态库依赖-ldd
  8. 关于解释List<Integer> list = new ArrayList<Integer>()
  9. 使用System Center Operations Manager监视Exchange 2007客户端连通性(二)
  10. jzoj1166-树中点对距离【点分治】
  11. excel导入导出工具类_Hutool Java工具类库导出Excel,超级简单
  12. php 时间段 mysql 存储_php – 在MySQL解决方案中存储日期范围
  13. 电脑ATX电源接口定义详解
  14. RC振荡电路 双三极管多谐振荡器
  15. 【游戏开发实战】教你使用Unity实现录屏生成GIF的功能,录个妹子跳舞的GIF吧
  16. 含参积分求导/积分上限函数求导/
  17. 【DP专题】——洛谷P2466 [SDOI2008]Sue的小球
  18. 全球太阳能、风能资源空间分布数据集
  19. linux 工具——终端分屏与vim分屏
  20. 搭载敏捷飞天底座 阿里云专有云敏捷版全面升级

热门文章

  1. Excel——数据有效性+条件格式应用
  2. android桌面单词,让解锁屏幕从此变的有意义
  3. Stlink固件更新问题“ST-Link is not in the dfu mode Please restart it“的解决方法
  4. h3c linux静态链路聚合,H3C 链路聚合配置
  5. android动画实例
  6. Where Softirq Is Invoked
  7. 【水环境病原菌数据库开发心得】
  8. 计算机频率,频率是什么意思 电脑部分硬件的频率介绍【详解】
  9. 数学分析教程(科大)——7.2笔记+习题
  10. 《PyTorch深度学习实践》 课堂笔记 Lesson7 神经网络多维特征输入的原理推导与实现