Python 语言学习——应用1.1 数字图像处理(第一节,颜色)
目录
1.基础知识
2.实战演示
1.基础知识:
1.图像的表示.
2.数字图像处理.
3.色度学基础与颜色模型.
4.图像信号的数字化
5.数字图像的数据结构
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,直接用就行,不用手动进行复杂的代数运算.
作者:William_Edmund