在这篇文章里我们聊一下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.sizecropped = 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 opencv 裁剪图片_Python图片裁剪的两种方式——Pillow和OpenCV相关推荐

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

    本文参考Python图片裁剪的两种方式--Pillow和OpenCV并进行了一些更新 感谢作者:hfutdog 在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一 ...

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

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

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

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

  4. python 并发执行命令_python: 多线程实现的两种方式及让多条命令并发执行

    一 概念介绍 Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading. ...

  5. python怎么下载图片怎么保存到本地_详解Python下载图片并保存本地的两种方式

    一:使用Python中的urllib类中的urlretrieve()函数,直接从网上下载资源到本地,具体代码: import os,stat import urllib.request img_url ...

  6. 原生态的ajax如何上传文件,原生ajax和iframe框架实现图片文件上传的两种方式

    大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参 ...

  7. python扩展屏幕截图_Python实现屏幕截图的两种方式

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

  8. python动态捕捉屏幕_Python实现屏幕截图的两种方式

    使用windows API 使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释. 一.Python调用windows API实现屏幕截图 好处是 灵活 速度快 缺点是: 写法繁琐 ...

  9. Java通过图片url地址获取图片base64位字符串的两种方式

    工作中遇到通过图片的url获取图片base64位的需求.一开始是用网上的方法,通过工具类Toolkit,虽然实现的代码比较简短,不过偶尔会遇到图片转成base64位不正确的情况,至今不知道为啥. 之后 ...

最新文章

  1. Linux学习中我的10条建议和技巧
  2. Docker搭建网页数据库管理-Adminer
  3. matlab patch函数_MATLAB实现紧束缚近似能带结构画图
  4. jzoj3682-Points and Segments【模型转化,欧拉回路】
  5. SpringCloud+Redis
  6. 设计灵感|App中的页面空状态应该如何表现?
  7. 超级硬盘数据恢复软件v2.7.2.6_超级硬盘数据恢复软件的U盘存储卡删除文件的恢复方式...
  8. 从0开始学习自动化测试框架cypress(三)特性
  9. iphone已停用怎么解锁_iPhone 已停用怎么办?使用锁屏密码需要注意
  10. 什么是NVMe?一篇文章理清它的前生今世
  11. 第十届全国大学生智能汽车竞赛获奖名单
  12. 拆书笔记24|笨笨的圣人
  13. 搜狐全体员工遭遇工资补助诈骗,CEO张朝阳回应:没那么严重
  14. vscode必备常用插件
  15. 《图说区块链》读书笔记(完整版)
  16. Pytorch 正则化方法(权重衰减和Dropout)
  17. 将MP4转换为GIF
  18. 微信公众平台SDK! Senparc.Weixin.MP.dll(资料整理)
  19. 学黑客要学什么编程语言
  20. 程序放在linux哪个目录,linux下装的程序应该放到哪个目录下

热门文章

  1. el-table的动态表头设置fixed后对不齐的问题
  2. 全志V40 HDMI + LVDS实现双屏异显
  3. 实现pdf文件在线预览(需要PDF文件的路径)
  4. Bootstrap框架之栅格系统
  5. ubuntu服务器创建用户并且分配磁盘空间
  6. 托福学习计划日本留学考研
  7. 【SpringBoot】错误处理
  8. Incorrect string value: ‘\xE4\xB8\xAD\xE5\x9B\xBD‘ for column ‘nation‘ at row 1
  9. Cytoskeleton 艾美捷 肌动蛋白结合蛋白研究
  10. Acwing 4339 敌兵布阵 暴力 + 分块 + 线段树 + Zkw线段树 + 树状数组