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

news2025/2/4 8:47:41

目录

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.coloradmin.cn/o/2191191.html

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

相关文章

SOMEIP_ETS_166: SD_TestFieldUINT8

测试目的: 验证DUT能够通过Getter和Setter方法正确地发送和接收TestFieldUINT8字段的值。 描述 本测试用例旨在确保DUT的ETS能够响应Tester的请求,正确地使用Getter方法获取TestFieldUINT8的值,以及使用Setter方法设置新的值。 测试拓扑&…

QGIS中怎么加载数据(如矢量shp与栅格数据)

最近有不少初学者来问我qgis里怎么加载数据 这个与arcgis中的操作其实也是类似的,也是通过软件的里面+号就行了 下面是我对这个问题的解决思路: 一种是直接把图层文件拖进去,但是这种方法很有局限性,下面我还说明一…

JavaWeb的小结02

第2章-第2节 一、知识点 HttpServletRequest请求对象、HttpServletResponse响应对象、响应内容类型Content-Type、请求转发、重定向、ServletContext对象。 二、目标 深刻理解HttpServletRequest对象的作用。 深刻理解HttpServletResponse对象的作用。 掌握HttpServletRequ…

什么是请求转发?

请求转发 解释 请求转发,将前端发送的请求转发到别的资源 别的资源是指: servlet,页面 即: 请求转发,可以将请求转发值另外一个servlet;也可以是将请求转发至页面 1、 请求转发演示 1.1 请求转发跳转页面 实战: 之前注册练习,修改: 实现注册完跳转到登录页面 1.2 请求转发…

【Matlab案例】imageJ + matlab 实现物体轨迹追踪及路径彩色上色

我们经常看到一些文献中对细胞或者粒子的运动轨迹进行上色,不同的颜色对应着不同的时间。一纯色的轨迹实现起来很方便,彩色的轨迹如何实现呢?本文使用imageJ获取轨迹数据,使用matlab对轨迹进行上色。结果如下: 1. im…

Java | Leetcode Java题解之第457题环形数组是否存在循环

题目&#xff1a; 题解&#xff1a; class Solution {public boolean circularArrayLoop(int[] nums) {int n nums.length;for (int i 0; i < n; i) {if (nums[i] 0) {continue;}int slow i, fast next(nums, i);// 判断非零且方向相同while (nums[slow] * nums[fast]…

Python爬虫(二)--http基本原理(Python Crawler (2) Basic Principles of HTTP)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

TriLite完成A轮扩展融资:加速AR微型投影仪技术创新与市场拓展

近日,全球领先的AR微型投影仪开发商TriLite宣布成功完成A轮扩展融资,将A轮融资总额提升至超过2000万欧元。这一轮融资不仅彰显了资本市场对TriLite技术实力和市场潜力的高度认可,更为其后续在AR微型投影仪领域的技术研发、产品迭代以及市场拓展提供了坚实的资金保障。以下是…

力扣刷题 | 两数之和

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 给定一个整数数组 nums 和…

C++ | Leetcode C++题解之第456题132模式

题目&#xff1a; 题解&#xff1a; class Solution { public:bool find132pattern(vector<int>& nums) {int n nums.size();vector<int> candidate_i {nums[0]};vector<int> candidate_j {nums[0]};for (int k 1; k < n; k) {auto it_i upper_…

Leetcode—416. 分割等和子集【中等】

2024每日刷题&#xff08;172&#xff09; Leetcode—416. 分割等和子集 C实现代码 class Solution { public:bool canPartition(vector<int>& nums) {int sum accumulate(nums.begin(), nums.end(), 0);if(sum % 2) {return false;}int m nums.size();int subSu…

自动售卖柜目标检测数据集 4880张 商品数据集 voc yolo

自动售货机商品检测数据集 名称 自动售货机商品检测数据集 (Automatic Vending Machine Product Detection Dataset) 规模 图像数量&#xff1a;4880张图像。类别&#xff1a;30种不同的商品类别。 数据划分 训练集 (Train)&#xff1a;通常占总数据的80%左右&#xff0c;…

【AI知识点】二项分布(Binomial Distribution)

二项分布&#xff08;Binomial Distribution&#xff09; 是概率论和统计学中描述独立重复的伯努利试验中成功次数的离散概率分布。它是基于多次独立的伯努利试验的扩展&#xff0c;用于描述在 n n n 次试验中发生成功的次数。 1. 二项分布的定义 二项分布用于描述在 n n n…

利用GPU进行训练

文章目录 一、GPU训练模型二、对比使用gpu和cpu进行训练所花费的时间三、GPU训练模型的第二种表达方式 一、GPU训练模型 GPU只能够训练三种变量&#xff0c;分别是&#xff1a; 网络模型 数据&#xff08;输入&#xff0c;标注targets&#xff09; 损失函数 使用方式是.cuda…

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

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

rockylinux9安装软件报错

1、rocky linux9再安装软件的时候报错&#xff1a; [rootClient119 yum.repos.d]# yum -y install epel-release [rootClient119 yum.repos.d]# yum -y install libcgroup Extra Packages for Enterprise Linux 9 - x86_64 …

【MySQL 09】表的内外连接

目录 1.内连接 创建表&#xff08;案例准备&#xff09; 案例&#xff1a; 2.外连接 2.1左外连接 案例&#xff1a; 2.2右外连接 案例&#xff1a; 1.内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过…

什么是pip? -- Python 包管理工具

前言 不同的编程语言通常都有自己的包管理工具&#xff0c;这些工具旨在简化项目的依赖管理、构建过程和开发效率&#xff0c;同时促进代码的复用和共享。每个包管理工具都有其独特的特点和优势&#xff0c;开发者可以根据自己的编程语言和项目需求选择合适的包管理工具。 pip是…

R语言的下载、安装及环境配置(RstudioVSCode)

0x01 R语言篇 一、软件介绍 R for Windows是一个免费的用于统计计算和统计制图的优秀工具&#xff0c;是R语言开发工具。它拥有数据存储和处理系统、数组运算工具&#xff08;其向量、矩阵运算方面功能尤其强大&#xff09;、完整连贯的统计分析工具、优秀的统计制图等功能。…

Spring Cloud之OpenFeign的具体实践

1 基本概念 OpenFeign基于Feign框架开发&#xff0c;而Feign是Netflix开源的一个声明式Web服务客户端。OpenFeign通过定义接口、注解和动态代理等方式&#xff0c;将服务调用的过程封装起来&#xff0c;使得开发者只需要定义服务接口&#xff0c;而无需关心底层的HTTP请求和序列…