Python 语言学习——应用1.1 数字图像处理(第一节,颜色)

目录

1.基础知识

2.实战演示


1.基础知识:

        1.图像的表示.
  • 函数表示图像是二维信号,定义为二维函数f(x,y),其中,xy是空间坐标,f(x,y)是点(x,y)的幅值。拓展看,视频,又称动态图像,是多帧位图的有序组合用三维函数f(x,y,t)表示,其中,t为时间变量,f(x,y,t)t时刻那一帧点(x,y)的幅值
  • 模拟表示:通过客观的物理量表现颜色的图像,如照片、印刷品、画等。然而这类图像空间坐标值(x,y)及每点的光强连续,无法用计算机处理
  • 数字表示二维像素矩阵,矩阵中每一个点具有一种颜色。计算机衷意的形式。

        2.数字图像处理.

  • 数字图像处理Digital Image Processing利用计算机对图像进行去除或衰减噪声、增强、复原、分割、提取特征等的理论、方法和技术 .
  • 数字图像处理一般有三个层次:图像处理(改善视觉效果,增强某些特定的信息,去噪、增强、锐化、色彩处理、复原等图像分析(从点阵图像中找出某些数据,用来对图像内容进行识别理解,图像分割、图像描述和分析等)、和图像识别理解根据从图像中提取出的数据,利用模式识别的方法和理论,理解图像内容

        3.色度学基础与颜色模型.

  • 颜色匹配三原色:在颜色匹配中,用于颜色混合以产生任意颜色的三种颜色;三刺激值:颜色匹配实验中,当与待测色达到色匹配时所需要的三原色的数量,记作R、G、B。简单讲就是调颜料。核心在于三原色的比例。
  • 指导怎么调出各种色彩的标准:CIE 1931-XYZ色度系统——用假想的三种原色可以模拟可见光谱中的所有颜色。其中XYZ与RGB的调颜料关系为:

  • 上述调色方式只是调颜色,对明度,色调,饱和度处理欠妥,于是有:孟德尔表色系统。
  • 颜色模型:颜色的描述是通过建立色彩模型来实现的,不同的色彩模型对应于不同的处理目的。各种不同的颜色模型之间可以通过数学方法互相转换。
  • 常用颜色模型:RGB模型——以700nm(红)、546.1nm (绿)、435.8nm(蓝) 三个色光为三基色,又称为物理三基色。自然界的所有颜色都可以通过选用这三基色按不同比例混合而成。CMY和CMYK颜色模型——运用在大多数在纸上沉积彩色颜料的设备,如彩色 打印机和复印机。YIQ颜色模型——Y指亮度,即灰度值;I和Q指色调,描述色彩及饱 和度。利用人的可视系统对亮度变化比对色调和饱 和度变化更敏感而设计。YCbCr颜色模型——Y指亮度,与YIQ和YUV的Y相同,Cb和Cr指色彩。常见的灰度化方法之一: Y =0.299* R +0.587 * G +0.114 * B。转换方式:(R'为R/(R+G+B))

        4.图像信号的数字化

  • 模拟图像转换为数字图像,方能被计算机处理,这 一过程称为图像信号的数字化,包括:采样和量化。采样:对空间坐标x和y离散化,即确定水平和垂直 方向上的像素数。图像分辨率:采样所获得的图像总像素的多少,以水平和垂直像素数表示。量化:将各个像素所含的明暗信息离散化。8位量化:即2 8 ,充分考虑到人眼的识别能力, 非特殊用途的图像均为8bit量化,用[0 255]描述 “从黑到白”,0和255分别对应亮度的最低和 最高级别。可以具体到RGB三原色的情况,如下图:

 

         5.数字图像的数据结构

  • 文件头:图像的自我说明,应包含图像的 维数、类型、创建日期和某类标 题,也可以包含用于解释像素值 的颜色表或编码表,甚至历史段 (包含如何建立和处理图像的信 息)
  • 图像数据:像素颜色值或压缩后的数据。
  • 举例:JPG,PNG,GIF,TIFF,BMP

2.实战演示 

 P1.  使用编程打开一幅真彩色图像,将绿色和蓝色通道进行互换,显示通道互换后的图像 ,并对结果进行说明.

from PIL import Image  # 导入PIL库中的Image模块,用于图像处理# 打开图像文件
image = Image.open("rainbow.jpg")  # 使用Image.open()函数打开名为"rainbow.jpg"的图像文件,并将其赋值给变量image
image.show()# 获取图像的 RGB 通道
r, g, b = image.split()  # 使用image.split()将图像分为红色(r)、绿色(g)和蓝色(b)通道,并将它们分别赋值给变量r、g和b# 交换绿色和蓝色通道
new_image = Image.merge("RGB", (r, b, g))  # 使用Image.merge()函数将绿色和蓝色通道互换,创建新的图像,并将其赋值给变量new_image
new_image.show()
# 保存修改后的图像
new_image.save("rainbow_swapped.jpg")  # 使用new_image.save()方法将修改后的图像保存

说明:当我们调用 image.split() 方法时,它会返回一个包含三个通道图像的元组:红色通道、绿色通道和蓝色通道。所以需要三个量去接待这三个元组,每个元组储存每个像素在相应通道上的强度值,所以代表相应通道上的灰度图。每个灰度图像代表了原始图像在对应通道上的强度值分布情况。这样,我们就可以对每个通道进行单独处理,比如互换绿色和蓝色通道,再合成为新的图像。


P2.  使用编程打开一幅真彩色图像,利用前面提到的灰度化式子对其进行灰度化,并显示变换前后图像。

from PIL import Image, ImageChops# 打开图像文件
image = Image.open("rainbow.jpg")
image.show()# 将图像分割为红色(R)、绿色(G)和蓝色(B)通道
r, g, b = image.split()# 使用公式 Y = 0.299 * R + 0.587 * G + 0.114 * B 计算灰度值
gray_r = r.point(lambda x: 0.299 * x)
gray_g = g.point(lambda x: 0.587 * x)
gray_b = b.point(lambda x: 0.114 * x)# 将三个灰度图像相加
y = ImageChops.add(gray_r, gray_g)
y = ImageChops.add(y, gray_b)# 合并灰度通道为灰度图像
gray = Image.merge("L", (y,))#实际上y已经是gray这个结果,y本身也表示图像
gray.show()
# 保存灰度图像
gray.save("rainbow_gray.jpg")

 说明:merge函数这次返回一个灰度类型的图像"L",r.point(函数f)函数即将r元组的各元素(强度)值通过函数f映射后组成新的元组r',返回r'.而lambda是一个简洁的函数定义方式.


P3. 使用编程打开一幅真彩色图像,将其变换到HSV、YCbCr空间,观察变换后的数据,并显示变换前后图像

from PIL import Image# 读取彩色图像
image_path = "rainbow.jpg"
color_image = Image.open(image_path)
# 将图像转换为HSV模式
hsv_image = color_image.convert("HSV")
# 将图像转换为YCbCr模式
ycbcre_image = color_image.convert("YCbCr")
color_image.show()
hsv_image.show()
ycbcre_image.show()

python中内置有转换函数convert,直接用就行,不用手动进行复杂的代数运算.

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

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

相关文章

一阶差分模板的频率响应

一阶差分模板不同于二阶差分模板,它是一个奇对称的模板,傅里叶变换是纯虚数,无法用图形直接显示傅里叶变换,只能显示幅值谱。 冈萨雷斯的这个图我一直很好奇是怎么显示的,也没有坐标轴标出变量表示。 如今终于想明白…

论文笔记:微表情欺骗检测

整理了AAAI2018 Deception Detection in Videos 论文的阅读笔记 背景模型实验可视化 背景 欺骗在我们的日常生活中很常见。一些谎言是无害的,而另一些谎言可能会产生严重的后果。例如,在法庭上撒谎可能会影响司法公正,让有罪的被告逍遥法外。…

04-SpringBootWeb案例(中)

3. 员工管理 完成了部门管理的功能开发之后,我们进入到下一环节员工管理功能的开发。 基于以上原型,我们可以把员工管理功能分为: 分页查询(今天完成)带条件的分页查询(今天完成)删除员工&am…

服务器conda环境安装rpy2

参考博客 https://stackoverflow.com/questions/68936589/how-to-select-r-installation-when-using-rpy2-on-conda 现在我遇到这样一个问题,服务器系统环境没有R(没有权限安装),我只能在minconda的conda环境中使用R, 使用方法如下 我现在…

芝法酱学习笔记(0.6)——nexus与maven私库

一、私库的需求 在一个公司中,后端程序员通常几十上百个。在没有镜像私库的情况下,每当引入新库时,大家都会从maven中央仓库下载一遍这个库。这样无疑十分浪费。再加之国家的防火墙政策,许多人下载lib包可能还会十分缓慢。不同程…

Python水循环标准化对比算法实现

🎯要点 算法区分不同水循环数据类型:地下水、河水、降水、气温和其他,并使用相应标准化降水指数、标准化地下水指数、标准化河流水位指数和标准化降水蒸散指数。绘制和计算特定的时间序列比较统计学相关性。使用相关矩阵可视化集水区和显示空…

推荐:五种限流(Rate Limiting)算法

推荐:五种限流(Rate Limiting)算法,发现一个不错的讲这个算法的UP,地址是:05~五种限流(Rate Limiting)算法_哔哩哔哩_bilibili https://www.bilibili.com/video/BV11k4SerE74/ 全部用动画展示,十分生动,比如漏桶算法&…

短剧小程序短剧APP在线追剧APP网剧推广分销微短剧小剧场小程序集师知识付费集师短剧小程序集师小剧场小程序集师在线追剧小程序源码

一、产品简介功能介绍 集师专属搭建您的独有短剧/追剧/小剧场小程序或APP平台 二、短剧软件私域运营解决方案 针对短剧类小程序的运营,以下提出10条具体的方案: 明确定位与目标用户: 对短剧类小程序进行明确定位,了解目标用户群体…

【AI知识点】置信区间(Confidence Interval)

置信区间(Confidence Interval, CI) 是统计学中用于估计总体参数的范围。它给出了一个区间,并且这个区间包含总体参数的概率等于某个指定的置信水平(通常是 90%、95% 或 99%)。与点估计不同,置信区间通过区…

开源的云平台有哪些?

开源云平台为用户提供了构建、管理和运行云基础设施及应用的能力,同时允许社区参与开发和改进。以下是一些知名的开源云平台: 1. OpenStack 简介:OpenStack:一个广泛使用的开源云平台,它由多个组件组成,提…

深度学习中的结构化概率模型 - 结构化概率模型的深度学习方法篇

序言 在深度学习的广阔领域中,结构化概率模型( Structured Probabilistic Model \text{Structured Probabilistic Model} Structured Probabilistic Model)扮演着至关重要的角色。这类模型利用图论中的图结构来表示概率分布中随机变量之间的…

精品WordPress主题/响应式个人博客主题Kratos

Kratos 是一款专注于用户阅读体验的响应式 WordPress 主题,整体布局简洁大方,针对资源加载进行了优化。 Kratos主题基于Bootstrap和Font Awesome的WordPress一个干净,简单且响应迅速的博客主题,Vtrois创建和维护, 主…

Markdown实用语法汇总

说明: 本来只展示本人常用的、markdown特有优势的一些语法。表格输入markdown的弱项,不作介绍,借助软件创建即可。引用图片、音频、视频等,虽然很方便,但是内容集成度不高,需要上传发布的时候很不方便&…

学习C语言(23)

整理今天的学习内容 1.文件的概念 使用文件是为了将数据永久化地保存 按照文件功能,在程序设计中一般把文件分成两类: 每个文件都有一个唯一的文字标识,文字标识常被称为文件名,文件名包含文件路径,文件名主干和文件…

Apollo9.0 Planning2.0决策规划算法代码详细解析 (4): PlanningComponent::Proc()

🌟 面向自动驾驶规划算法工程师的专属指南 🌟 欢迎来到《Apollo9.0 Planning2.0决策规划算法代码详细解析》专栏!本专栏专为自动驾驶规划算法工程师量身打造,旨在通过深入剖析Apollo9.0开源自动驾驶软件栈中的Planning2.0模块&am…

vAPI靶场

前言 自行去搭建vAPI靶场,配合postman使用 vapi1 创建用户 第一个用户 {"username": "shi","name": "shi1","course": "nihao","id": 10 } 第二个用户 {"username": "hui…

论文理解【LLM-CV】—— 【MAE】Masked Autoencoders Are Scalable Vision Learners

文章链接:Masked Autoencoders Are Scalable Vision Learners代码:GitHub - facebookresearch/mae发表:CVPR 2022领域:LLM CV一句话总结:本文提出的 MAE 是一种将 Transformer 模型用作 CV backbone 的方法&#xff0c…

制作一个流水灯,控制发光二极管由上至下再由下至上反复循环点亮显示,每次点亮一个发光二级管(Proteus 与Keil uVision联合仿真)

一、代码编写 (1)编写程序来控制发光二极管由上至下的反复循环流水点亮,每次点亮一个发光二极管。 #define uchar unsigned char // 定义uchar为unsigned char类型uchar tab[] {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f, 0x7f, 0x…

一个不错的 SQL 编码风格的指南

前言 SQL语句的编写对于我们后端开发者而言是一个必备的技巧,在日常工作中,SQL语言编写的质量不仅仅会影响到团队的合作效率与项目的可维护性,还直接关系到数据库的性能优化与数据安全。今天大姚给大家分享一个不错的 SQL 编码风格的指南&am…

【Qt】控件概述(4)—— 输出类控件

输出类控件 1. QLineEdit——单行输入框2. QTextEdit——多行输入框3. QComboBox——下拉框4. QSpinBox——微调框5. QDateEdit && QTimeEdit && QDateTimeEdit6 QDial——旋钮7. QSlider——滑动条 1. QLineEdit——单行输入框 QLineEdit是一个单行的输入框&…