Python实现图片裁剪的两种方式(Pillow和OpenCV)
在这篇文章里我们聊一下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实现自动网页截图并裁剪图片
本文实例为大家分享了python自动网页截图并裁剪图片的具体代码,供大家参考,具体内容如下 代码: # coding=utf-8 import time from selenium import webdriver from selenium.webdriver.chrome.options import Options from PIL import Image import os all_urls = ['http:/****edit'] def login(): chrome_option
-
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
PIL 图片操作 读取图片 img = Image.open("a.jpg") 显示图片 im.show() # im是Image对象,im是numpy类型,通过Image.fromarray(nparr, mode='RGB')函数转换为Image对象 图片的size (width, height) = img.size 图片的模式 mode = img.mode 截区域 img_c = img.crop(x1,y1,x2,y2) 裁剪图片 img = img.resize((siz
-
python实现对图片进行旋转,放缩,裁剪的功能
先说明下,我这是对某个目录下的图片名称进行操作,该目录下的图片名称为1.jpg,2.jpg.....这样类似的图片名. 1.旋转 # -*-coding:utf-8-*- from PIL import Image def rotateimg(inputimg,outimg): im = Image.open(inputimg) # 图片的宽度和高度 img_size = im.size print("图片宽度和高度分别是{}".format(img_size)) # 旋转图片 # 左
-
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
最近的项目里面需要对书籍的封面进行处理,就是加一条阴影线形成书脊的凹凸感,然后将书脊切出,分成两部分,以便客户端实现打开动画.由于需要在服务器端处理,使用就研究使用imagemagick来进行.同时准备封装了一个Node.js和Python的方法,主要还是讲一下然后使用imagemagick来对图片进行缩放.合成后进行裁剪吧. 首先素材文件如下(左边未处理封面,右边为需要合成上去的阴影): 安装ImageMagick的过程就不讲了,可以参考官网的安装方法:http://www.imagemagi
-
python opencv对图像进行旋转且不裁剪图片的实现方法
最近在做深度学习时需要用到图像处理相关的操作,在度娘上找到的图片旋转方法千篇一律,旋转完成的图片都不是原始大小,很苦恼,于是google到歪果仁的网站扒拉了一个方法,亲测好用,再次嫌弃天下文章一大抄的现象,虽然我也是抄歪果仁的. 废话不多说了,直接贴代码了. def rotate_bound(image, angle): # grab the dimensions of the image and then determine the # center (h, w) = image.shape[
-
Python图片裁剪实例代码(如头像裁剪)
今天就来说个常用的功能,图片裁剪,可用于头像裁剪啊之类的.用的还是我们之前用的哪个模块pillow 1. 安装pillow 用pip安装 pip install pillow 2. 图片裁剪 2.1 准备一张图片 2.2 我们使用的是Image中的crop(box)功能,它需要一个参数box,元组 类型,元组包括4个元素,如: (距离图片左边界距离x, 距离图片上边界距离y,距离图片左边界距离+裁剪框宽度x+w,距离图片上边界距离+裁剪框高度y+h) 如图:(x, y, x+w, y+h), x
-
python openvc 裁剪、剪切图片 提取图片的行和列
python openvc 裁剪图片 下面是4个坐标代码: import cv2 #裁剪图片路径input_path,四个裁剪坐标为:y1,y2,x1,x2,保存剪裁后的图片路径output_path def cut_img(input_path,y1,y2,x1,x2,output_path): #读图片cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道 img = cv2.imread(input_path,cv2.IMREAD_UNCHANGED) #剪裁图片img
-
Python实现图片裁剪的两种方式(Pillow和OpenCV)
在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV.两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧. 首先,我们有一张原始图片,如下图所示: 原始图片 然后,我们利用OpenCV对其进行裁剪,代码如下所示: import cv2 img = cv2.imread("./data/cut/thor.jpg") print(img.shape) cropped = img[0:128, 0:512] #
-
android获取图片尺寸的两种方式及bitmap的缩放操作
我就废话不多说了,大家还是直接看代码吧~ //Uri.parse("file://"+result.getImage().getCompressPath())) String path=uri.getPath(); Log.e("图片路径",path+""); SpannableString spannableString=new SpannableString(path); //方法一:通过uri把图片转化为bitmap的方法 Bitmap b
-
IOS给图片添加水印(两种方式)
为了防止自己辛苦做的项目被别人盗走,采取图片添加水印,在此表示图片的独一无二.加水印不是在上面添加几个Label,而是我们把字画到图片上成为一个整体,下面小编给大家分享IOS给图片添加水印(两种方式). 提供一个方法,此方法只需要传递一个要加水印的图片和水印的内容就达到效果. 第一种方式: -(UIImage *)watermarkImage:(UIImage *)img withName:(NSString *)name { NSString* mark = name; int w = img
-
Java web开发中加载图片路径的两种方式
(1) src="/image/1_it.jpg" (2) src="http://localhost:8080/image/1_it.jpg" 其中localhost可以换位你的电脑IP,端口号也要相应改变. 以上均在基于编译器idea以及tomcat服务器开发的web中测试可行!都是要先定位到项目的位置! 以上所述是小编给大家介绍的Java web开发加载图片路径的两种方式,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
-
对Python中创建进程的两种方式以及进程池详解
在Python中创建进程有两种方式,第一种是: from multiprocessing import Process import time def test(): while True: print('---test---') time.sleep(1) if __name__ == '__main__': p=Process(target=test) p.start() while True: print('---main---') time.sleep(1) 上面这段代码是在window
-
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
本文实例讲述了Python操作MySQL数据库的两种方式.分享给大家供大家参考,具体如下: 第一种 使用pymysql 代码如下: import pymysql #打开数据库连接 db=pymysql.connect(host='1.1.1.1',port=3306,user='root',passwd='123123',db='test',charset='utf8') cursor=db.cursor()#使用cursor()方法获取操作游标 sql = "select * from tes
-
Python实现获取弹幕的两种方式分享
目录 前言 环境 获取方式一: <简单, 但是弹幕很少> 请求数据 获取数据 解析数据 保存数据 获取方式二: <复杂一点点, 弹幕比较多,按日期来> 请求数据 解析数据 翻页 保存数据 前言 弹幕可以给观众一种“实时互动”的错觉,虽然不同弹幕的发送时间有所区别,但是其只会在视频中特定的一个时间点出现,因此在相同时刻发送的弹幕基本上也具有相同的主题,在参与评论时就会有与其他观众同时评论的错觉. 在国内的视频网站里,弹幕先是从A站被大家知道,随后B站发扬光大,导致现在全部视频平台和部
-
分享实现Android图片选择的两种方式
Android选择图片的两种方式: 第一种:单张选取 通过隐式启动activity,跳转到相册选择一张返回结果 关键代码如下: 发送请求: private static final int PICTURE = 10086; //requestcode Intent intent = new Intent(); if (Build.VERSION.SDK_INT < 19) {//因为Android SDK在4.4版本后图片action变化了 所以在这里先判断一下 intent.setAction
-
android实现图片裁剪的两种方法
两种android图片裁剪方式,供大家参考,具体内容如下 一.相机拍完照之后利用系统自带裁剪工具进行截取 public static void cropImage(Activity activity, Uri srcUri) { cropImageUri = srcUri; Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(srcUri, "image/*&q
-
Android实现图片的高斯模糊(两种方式)
在市面上很多的APP都使用了对图片作模糊化处理后作为背景的效果,来使得整个页面更具有整体感.如下就是网易云音乐的音乐播放页面: 很明显这个页面的背景是由中间的小图片模糊化后而来的.最常用的模糊化处理就是高斯模糊. 高斯模糊的几种实现方式: (1)RenderScript RenderScript是Google在Android 3.0(API 11)中引入的一个高性能图片处理框架. 使用RenderScriprt实现高斯模糊: 首先在在build.gradle的defaultConfig中添加Re
随机推荐
- jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
- CentOS 7配置LNMP开发环境及配置文件管理详解
- JAVA对象JSON数据互相转换的四种常见情况
- iOS制作framework静态库图文教程
- 2个Codeigniter文件批量上传控制器写法例子
- phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
- C# yield在WCF中的错误用法(一)
- Android打开GPS导航并获取位置信息返回null解决方案
- JavaScript中的函数嵌套使用
- Dockerfile 部署java web的环境详解
- Shell脚本遍历一个日期范围实例
- Windows下安装PHP单元测试环境PHPUnit图文教程
- Java中对list元素进行排序的方法详解
- JavaScript 数组的 uniq 方法
- 多个checkbox被选中时如何判断是否有自己想要的
- JS面向对象编程浅析
- 详解js跨域原理以及2种解决方案
- 使用伪命名空间封装保护独自创建的对象方法
- MyEclipse去除网上复制下来的代码带有的行号(正则去除行号)
- C++中typedef 及其与struct的结合使用