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

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

时间:2024-10-06 18:49:00浏览次数:8  
标签:gray 颜色 1.1 Python Image 数字图像处理 灰度 图像 image

目录

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,直接用就行,不用手动进行复杂的代数运算.

标签:gray,颜色,1.1,Python,Image,数字图像处理,灰度,图像,image
From: https://blog.csdn.net/William_Edmund/article/details/142711853

相关文章

  • Python-初识Python
    前言:在这篇博客当中,我们将步入Python知识的殿堂,Python以其简单、易学、开发效率高在近些年的发展可谓是迅猛,在许多领域都可以见到它的场景,例如:人工智能/机器学习、大数据开发、后端开发等都会用到。1.认识Python 1.1什么是编程语言Python和我们的C语言一样也是一门编程......
  • 学习python第一天(滞留的第6天)
    本来是好好的学习第一天,但是因为我遇到了接踵而至的困难(虽然都是无足轻重的小问题,但是这足以打败一个纯纯新手了),然后根本找不到方法解决,就懈怠了,疲倦了,懒惰了,松懈了……(这里我想展开说一下,就是关于搭建python坏境,需要下载python和编译器或者编辑器,网上有很多教程,但是他们只是“喂......
  • python: sort
     table=[['1','Du','GeovinDu','13824350518',92],['2','Rose','Tom','1882458888',38],['3','Lin','bo','......
  • 分析、总结Python使用列表、元组、字典的场景
    分析、总结Python使用列表、元组、字典的场景在Python中,列表、元组和字典是最常用的数据结构,每种数据结构都有其特定的应用场景。以下是对这三种数据结构的分析与总结:1.列表(List)特点:可变性:可以动态地修改、添加、删除元素。顺序性:保持元素的插入顺序。允许重复:可以包含相......
  • Python 高级技巧:深入解析读取 Excel 文件的多种方法
    一、引言 在数据分析和处理中,经常需要从Excel文件中读取数据。Python提供了多种库来实现这个功能,本文将深入探讨使用 ​​pandas​​、​​openpyxl​​ 和 ​​xlrd​​ 库读取Excel文件的高级技巧和代码实现。 二、使用pandas库读取Excel文件 ​​pandas......
  • 随机组句小游戏-V1.13版本
    玩法:随机抽取地点人物事件,来组句2024/10/03进行微调.\(代码/Code:\)#include<bits/stdc++.h>#include<windows.h>#defineSM_printf("%c%c%c%c%c%c",-64,-18,-278,-59,-319,-40);usingnamespacestd;ints1,s2,s3,xz1,bool01;stringcopy_;stringplace[105]......
  • Python语言中程序运行错误和异常处理
    '''Python捕获异常:一旦发生异常,程序就会终止,这是非常糟糕的事情,这种糟糕体现在两方面1.即便发生了异常,业务上可以忽略它,那么程序应当继续执行2.程序终止,使得异常的信息没有被保留下来,不利于问题的分析和总结为了提高程序的健壮性和解决问题,可以将异常捕获,根据业务......
  • uv --- replacement of conda + pip (python version + package version install) pyt
    uvhttps://docs.astral.sh/uv/AnextremelyfastPythonpackageandprojectmanager,writteninRust. InstallingTrio'sdependencieswithawarmcache.Highlights......
  • [Python手撕]公交路线
    classSolution:defnumBusesToDestination(self,routes:List[List[int]],source:int,target:int)->int:ifsource==target:return0station_route={}foriinrange(len(routes)):......
  • [Python手撕]判断二分图
    classSolution:defisBipartite(self,graph:List[List[int]])->bool:defbfs(i):color[i]=1queue=[(i,1)]whilequeue:t,c=queue.pop(0)nc=0......