当前位置: 首页 > news >正文

【Python】 Python 使用 Pillow 处理图像:几何变换

Python 使用 Pillow 处理图像:几何变换

pillow库操作切片、旋转、滤镜、输出文字、调色板等功能一应俱全。

1. 几何变换

Image 包含调整图像大小 resize() 和旋转 rotate() 的方法。前者采用元组给出新的大小,后者采用逆时针方向的角度。

调整大小并逆时针旋转 45度

from PIL import Image
from matplotlib import pyplot as plt
im=Image.open(‘./L1020120.JPG’)
o = im.resize((128, 128))
outfile= o.rotate(45)
plt.imshow(outfile)
plt.show()
在这里插入图片描述

要以90度为单位旋转图像,可以使用 rotate() 或 transpose() 方法。后者也可用于围绕其水平轴或垂直轴翻转图像。

FLIP_LEFT_RIGHT 水平左右翻转

Image.FLIP_TOP_BOTTOM 垂直上下翻转

Image.ROTATE_90 逆时针90度

Image.ROTATE_180 逆时针180度

Image.ROTATE_270 逆时针270度

更多的api可以查看官方文档和源码。

2. 剪贴,粘贴、合并图像

Image类包含允许您操作图像中的区域的方法。如:要从图像中复制子矩形图像使用 crop() 方法。

从图像复制子矩形

1.截取矩形图像

im=Image.open(‘L1020120.JPG’)
box = (100, 100, 400, 500)
region = im.crop(box)
plt.imshow(region)
plt.show()
_images/sec03_pillow-geom_5_0.png
定义box元组,图像基于左上角为(0,0)的坐标,box 坐标为 (左,上,右,下)。注意,坐标是基于像素。示例中为 300 * 400 像素。

2.先将复制的内容颠倒180度,在原图上粘贴子矩形图像

粘贴时要注意几点。选择好想要粘贴的位置,paste() 方法的两个参数依次是处理后的图片;以及图片的位置,同样为(左,上,右,下),不过,他们的值的间距为图片的像素(也就是确定好左上角的点后,分别加上像素值),不可调整。

将我们复制的图片旋转180度

region = region.transpose(Image.ROTATE_180)
定义要粘贴的位置。

box = (100, 100, 400, 500)
将子图(region) 粘贴(paste)回原图时,粘贴位置 box 的像素与宽高必须吻合。而原图和子图的 mode 不需要匹配,Pillow会自动处理。

im.paste(region, box)
plt.imshow(im)
plt.show()
_images/sec03_pillow-geom_11_0.png
region = region.transpose(Image.ROTATE_180)
box = (200, 200, 500, 600)
im.paste(region, box)
plt.imshow(im)
plt.show()
在这里插入图片描述

3.移动图像

移动图像就是将图片复制再粘贴。看起就像移动。

image_path = ‘L1020120.JPG’
im = Image.open(image_path)
设置想要偏转的像素值。

delta=200
xsize, ysize = im.size
print(im.size)
(1000, 734)
移动图片通常都是在X轴的方向上进行处理,我们设置的偏移值为200个像素,比X轴的值小所以可以直接处理,但是如果是移动2000个像素呢,可能就会出现错误,所以我们对他进行求余处理,也就是将图片移动了多个周期,依旧是2000时,我们需要移动的就是144个像素。

delta = delta % xsize
if delta == 0:
plt.imshow(im)
plt.show()
将确定好的位置复制下来,在重新组成一幅图片,视觉上看就像是图片在移动。

part1 = im.crop((0, 0, delta, ysize))
part2 = im.crop((delta, 0, xsize, ysize))
im.paste(part1, (xsize - delta, 0, xsize, ysize))
im.paste(part2, (0, 0, xsize - delta, ysize))
plt.imshow(im)
plt.show()

在这里插入图片描述

相关文章:

  • C //例 7.12 用选择法对数组中10个整数按由小到大排序。
  • 基于JAX-WS实现RESTful形式的web服务端点(endpoint)
  • 【数据分享】2021-2023年我国主要城市逐月轨道交通运营数据
  • 家庭安全计划 挑战赛| 溺水预防
  • FTP、NFS、SAMBA系统服务一
  • Java: 实现电影信息管理系统 (javaBean)
  • 前端面试之事件循环
  • sqoop笔记(安装、配置及使用)
  • 【架构】后端项目经典分层架构介绍
  • DeepFool: a simple and accurate method to fool deep neural networks
  • 答题猜歌闯关流量主小程序开发
  • 深圳联强优创手持PDA身份证阅读器 身份证核验手持机
  • docker在虚拟机中的应用
  • flink1.18.0 自适应调度器 资源弹性缩放 flink帮你决定并行度
  • 蓝桥杯每日一题2023.11.11
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • Codepen 每日精选(2018-3-25)
  • CSS魔法堂:Absolute Positioning就这个样
  • ECMAScript入门(七)--Module语法
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • SQLServer之索引简介
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 入手阿里云新服务器的部署NODE
  • 小程序开发之路(一)
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (1)Nginx简介和安装教程
  • (2)STL算法之元素计数
  • (31)对象的克隆
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (力扣)循环队列的实现与详解(C语言)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十)T检验-第一部分
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (算法)Travel Information Center
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)原始图像数据和PDF中的图像数据
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .net快速开发框架源码分享