【Python】-- python的基本图像处理(图像显示、保存、颜色变换、缩放与旋转等)

news2024/11/25 6:43:41

目录

一、图像文件的读写

 操作步骤:

显示图像文件的三个常用属性:

例:

二、图像文件的处理

常用的图像处理方法

1、图像的显示

2、图像的保存

 3、图像的拷贝与粘贴

 4、图像的缩放与旋转

 5、图像的颜色变换

 6、图像的过滤与增强

7、序列图像处理


在Python中,处理图像、网页等二进制文件时主要借助一些第三方库来解析:

  • PIL:最常用的图像处理第三方库
  • request:通过网络连接下载网页的第三方库
  • beautifulsoup4:解析网页格式、获取数据的第三方库

一、图像文件的读写

PIL库包括21个类,其中Image类是PIL库中一个非常重要的类,Image类提供了多种方法可以进行图像文件的读写和处理,要想使用这些方法,需要从PIL库导入Image模块。

from PIL import Image

 操作步骤:

首先打开文件,创建图像文件对象,然后进行处理,处理完毕后关闭文件。

使用image类的open方法载入图像文件,载入失败提示IOError,载入成功返回Image对象。

Image.open()

显示图像文件的三个常用属性:

  • format:识别图像格式或来源,如果图像不是从文件中读取的,返回None
  • size:图像的宽度和高度(单位为像素),返回二元组(宽度,高度)
  • mode:图像的颜色模式,L代表灰度图像、RGB代表真彩色图像,CMYK代表印刷图像

例:

from PIL import image
im=Image.open('d:\\Python\\1.jpg')
print(im.format,im.size,im.mode)

二、图像文件的处理

打开图像文件后,可调用Image类的各种方法或其他模块进行处理。

常用的图像处理方法

图像显示show()
图像保存sava()
图像的拷贝与粘贴crop(box)、paste(region,box)
图像的缩放与旋转rotate(angle)、transpose()
图像的颜色变换split()、merge()、convert()
图像的过滤与增强PIL库中的ImageFilter模块、ImageEnhance模块
序列图像处理seek()、tell()

1、图像的显示

show()用于显示图像。

例:

from PIL import Image
# 图像的显示
im=Image.open('csdn.webp')
im.show()

2、图像的保存

 sava()用于保存图像,有两个参数:文件名filename和图像格式format;

如果调用时不指定保存格式,将自动根据图像文件的扩展名保存图像;

如果指定格式,则按照格式存储;

sava()可以实现图像格式的转换,例如:将csdn.jpg保存为png格式文件

例:

"""图像的保存"""
from PIL import Image
im=Image.open('csdn.webp')
im.save('csdn.jpg')

 3、图像的拷贝与粘贴

crop(box)从图像中拷贝一个矩形图像。参数box是一个四元元组,四元素分别代表矩形左上角和右下角顶点的横纵坐标。坐标系统原点(0, 0)为图片左上角。paste(region, box)将一个图像粘贴到另一个图像上。region指被粘贴图像对象,变量box指定粘贴区域,如果是二元元组,代表粘贴区域左上角的横纵坐标;如果是四元元组,则代表左上和右下角的横纵坐标。如果为空,则默认为(0, 0)。如果给定四元元组,被粘贴图像的尺寸必须与粘贴区域尺寸一样。如果尺寸不匹配,被粘贴的图像将被转换为当前图像的模式

例:

"""图像的拷贝与粘贴"""
from PIL import Image
im=Image.open('csdn.jpg')
#定义拷贝区域
box=(100,20,281,202)
#拷贝图像,返回新的图像对象
region=im.crop(box)
region.show()
#将图像region粘贴到图像im左上角
im.paste(region,(0,0))
#将剪裁下来的图像粘贴到原始图像上
im.save('new.jpg')
im1=Image.open('new.jpg')
im1.show()

剪裁的图片:

将剪裁的图片放到原图的左上角:

 4、图像的缩放与旋转

resize(size)根据参数size指定的尺寸调整图像,生成一个副本文件。rotate(angle)按照参数angle指定的角度逆时针旋转图像,生成一个副本文件。transpose()方法预定义了一些旋转方式,如左右反转,上下翻转,逆时针旋转(90180270)

例:

"""图像的缩放与旋转"""
from PIL import Image
im=Image.open('csdn.jpg')
#缩小尺寸
im.resize((200,100))
#逆时针旋转45°
out=im.rotate(45)
out.show()
# 左右反转
out=im.transpose(Image.Transpose.FLIP_LEFT_RIGHT)
out.show()
#上下反转
out=im.transpose(Image.Transpose.FLIP_TOP_BOTTOM)
out.show()
# 逆时针旋转90°
out=im.transpose(Image.Transpose.ROTATE_90)
out.show()

 5、图像的颜色变换

图像有不同颜色模式。在RGB模式下,每张图片由三个颜色通道RGB叠加而成。可以使用split()分离三个颜色通道,对每种颜色分别处理,再用merge()把几个通道合并形成新的图像。还可以使用convert()将图像转换为不同的颜色模式参数。

 例:

"""图像的颜色变换"""
from PIL import Image
im=Image.open('csdn.jpg')
#分离三个颜色通道
r,g,b=im.split()
# 更换r、g、b颜色后合成新图像
im=Image.merge('RGB',(b,r,g))
im.show()

 

 6、图像的过滤与增强

PIL中的ImageFilter模块和ImageEnhance模块提供了过滤图像和增强图像的方法。ImageFilter模块预定义了10种图像过滤方法,可以提取图像轮廓、图像锐化、图像平滑等,主要使用 filter()方法实现。ImageEnhance模块专门用于图像的增强处理,可以增强(或减弱)图像的亮度、对比度、色度

例:

"""图像的过滤与增强"""
from PIL import Image
from PIL import ImageFilter
from PIL import ImageEnhance
im=Image.open('csdn.jpg')
detfilter=im.filter(ImageFilter.DETAIL)#图像细节增强
detfilter.show()
confilter=im.filter(ImageFilter.CONTOUR)#图像轮廓效果
confilter.show()
smtfilter=im.filter(ImageFilter.SMOOTH)#图像平滑
smtfilter.show()
sharpfilter=im.filter(ImageFilter.SHARPEN)#图像锐化
sharpfilter.show()

enhbrightim=ImageEnhance.Brightness(im)
brightness=5
eng_bri=enhbrightim.enhance(brightness)#图像亮度增强为原来的1.5倍
eng_bri.show()
enhbrightim=ImageEnhance.Contrast(im)
contrast=5
enh_con=enhbrightim.enhance(contrast)#图像对比度增强为原1.5倍
enh_con.show()

分别为细节增强、轮廓效果、平滑、锐化、亮度增强、对比度增强

 

 

PIL还支持对像素点的直接操作。例如将ai.jpg分离成三个颜色通道,对其中一个通道进行加强或减弱操作,再使用Merge将通道合并,从而改变图片的色调(冷暖色调的互换)等。如其中b层每个像素点的亮度增大20%

im=Image.open('csdn.jpg')
r,g,b=im.split()
out=b.point(lambda i:i*1.2)
im=Image.merge('RGB',(r,g,b))
im.show()

7、序列图像处理

序列图像是将多帧图像保存在一个图像文件中,按照一定时间间隔播放形成动画效果gif图片就是序列图像。PIL对这种动态图片也提供了基本的处理方法。当用open()打开这类图像文件时,会自动载入第一帧图像,使用 seek()tell()方法可以在各帧之间移动。seek(frame)表示跳转到指定的图像帧,tell()返回当前帧的序号

 例:

代码采用了try-except结构,首先执行try中的语句,当图像已经跳转到最后一副图像帧时,再次跳转(im.tell()+1)会出现异常,此时执行except后面的语句,程序结束。

"""图像的序列操作"""
from PIL import Image
# 读入gif文件
im=Image.open('pai.gif')
try:
    im.save('frame{:02d}.png'.format(im.tell()))
    # 保存图像帧为png文件
    while True:
        # 跳转到下一帧图像
        im.seek(im.tell()+1)
        im.save('frame{:02d}.png'.format(im.tell()))
except:
    print('处理结束')


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1173807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】用户管理权限控制

文章目录 前言一. 用户管理1. 创建用户2. 删除用户3. 修改用户密码 二. 权限控制1. 用户授权2. 查看权限3. 回收权限 结束语 前言 MySQL的数据其实也以文件形式保存,而登录信息同样保存在文件中 MySQL的数据在Linux下默认路径是/var/lib/mysql 登录MySQL同样也可以…

全网超细,Pytest自动化测试框架入门到精通-实战整理,一篇打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Pytest和Unitt…

交叉编译程序:以 freetype 为例

1 程序运行的一些基础知识 1.1 编译程序时去哪找头文件? 系统目录:就是交叉编译工具链里的某个 include 目录;也可以自己指定:编译时用 “ -I dir ” 选项指定。 1.2 链接时去哪找库文件? 系统目录&#…

二叉树OJ练习题(C语言版)

目录 一、相同的树 二、单值二叉树 三、对称二叉树 四、树的遍历 前序遍历 中序遍历 后序遍历 五、另一颗树的子树 六、二叉树的遍历 七、翻转二叉树 八、平衡二叉树 一、相同的树 链接:100. 相同的树 - 力扣(LeetCode) bool isSameTree(…

前端框架Vue学习 ——(一)快速入门

文章目录 Vue 介绍Vue快速入门 Vue 介绍 Vue 是一套前端框架,免除原生 JavaScript 中的 DOM 操作,简化书写。基于 MVVM (Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。官网: https://v2.cn.vuejs.or…

Flow-based models(NICE);流模型+NICE+代码实现

参考: 李宏毅春季机器学习NICE: Non-linear Independent Components Estimationhttps://github.com/gmum/nice_pytorch 文章目录 大致思想数学预备知识Jacobian矩阵行列式以及其几何意义Change of Variable Theorem Flow-based modelNICE理论代码 大致思想 Flow-B…

【Linux系统化学习】开发工具——gdb(调试器)

个人主页点击直达:小白不是程序媛 Linux专栏:Linux系统化学习 个人仓库:Gitee 目录 前言: gdb版本检查和安装 Debug和Release gdb的使用 其他指令 前言: 前几篇文章分别介绍了在Linux下的代码编辑器、编译器。…

c面向对象编码风格(上)

面向对象和面向过程的基本概念 面向对象和面向过程是两种不同的编程范式,它们在软件开发中用于组织和设计代码的方式。 面向过程编程(Procedural Programming)是一种以过程(函数、方法)为核心的编程方式。在面向过程…

2021年电工杯数学建模B题光伏建筑一体化板块指数发展趋势分析及预测求解全过程论文及程序

2021年电工杯数学建模 B题 光伏建筑一体化板块指数发展趋势分析及预测 原题再现: 国家《第十四个五年规划和 2035 年远景目标纲要》中提出,将 2030 年实现“碳达峰”与 2060 年实现“碳中和”作为我国应对全球气候变暖的一个重要远景目标。光伏建筑一体…

七月论文审稿GPT第二版:从Meta Nougat、GPT4审稿到LongLora版LLaMA、Mistral

前言 如此前这篇文章《学术论文GPT的源码解读与微调:从chatpaper、gpt_academic到七月论文审稿GPT》中的第三部分所述,对于论文的摘要/总结、对话、翻译、语法检查而言,市面上的学术论文GPT的效果虽暂未有多好,可至少还过得去&am…

1.Netty概述

原生NIO存在的问题(Netty要解决的问题) 虽然JAVA NIO 和 JAVA AIO框架提供了多路复用IO/异步IO的支持,但是并没有提供给上层“信息格式”的良好封装。JAVA NIO 的 API 使用麻烦,需要熟练掌握 ByteBuffer、Channel、Selector等 , 所以用这些API实现一款真正的网络应…

题解:轮转数组及复杂度分析

文章目录 🍉前言🍉题目🍌解法一🍌解法二:以空间换时间🥝补充:memmove 🍌解法三(选看) 🍉前言 本文侧重对于复杂度的分析,题解为辅。 …

02-React组件与模块

组件与模块 前期准备 安装React官方浏览器调试工具,浏览器扩展搜索即可 比如红色的React就是本地开发模式 开启一个用React写的网站,比如美团 此时开发状态就变成了蓝色 组件也能解析出来 何为组件&模块 模块,简单来说就是JS代…

亚马逊云科技大语言模型下的六大创新应用功能

目录 前言 亚马逊云科技的AI创新应用 ​编辑 Amazon CodeWhisperer Amazon CodeWhisperer产品的优势 更快地完成更多工作 自信地进行编码 增强代码安全性 使用收藏夹工具 自定义 CodeWhisperer 以获得更好的建议 如何使用Amazon CodeWhisperer 步骤 1 步骤 2 具体…

php7.4.32如何快速正确的开启OpenSSL扩展库,最简单的办法在这里!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

GNU ld链接器 lang_process()(二)

一、ldemul_create_output_section_statements() 位于lang_process()中11行 。 该函数用于创建与目标有关的输出段的语句。这些语句将用于描述输出段的属性和分配。 void ldemul_create_output_section_statements (void) {if (ld_emulation->create_output_section_sta…

PS Raw中文增效工具Camera Raw 16

Camera Raw 16 for mac(PS Raw增效工具)的功能特色包括强大的图像调整工具。例如,它提供白平衡、曝光、对比度、饱和度等调整选项,帮助用户优化图像的色彩和细节。此外,Camera Raw 16的界面简洁易用,用户可…

每日一题 187. 重复的DNA序列(中等)

由于今天做了周赛,每日一题就简单点直接暴力哈希 class Solution:def findRepeatedDnaSequences(self, s: str) -> List[str]:d defaultdict(int)ans []for i in range(len(s) - 9):t s[i: i 10]d[t] 1if d[t] 2:ans.append(t)return ans

CCC数字钥匙设计【NFC】 --通过NFC进行车主配对Phase4

1、车主配对流程介绍 车主配对可以通过车内NFC进行,若支持UWB测距,也可以通过蓝牙/UWB进行。通过NFC进行车主配对总共有5个Phase。本文档主要对Phase4进行介绍。 1) Phase0:准备阶段; 2) Phase1:启动流程&#xff1…

凸优化问题(最简单)

一、凸优化问题 1.1 概念 凸优化问题minf(x):需要同时满足两个条件:变量可行域时凸的(convex);目标函数也是凸函数(convex)。 (1)变量x的可行域Ω为凸集,即对于集合Ω中任意两点x1、x2∈Ω,他…