(按照老师发的学习计划走)
先学习数字图像处理:
1.单色图像 0-255 黑到白
2.彩色图像:红绿蓝三元组的二维矩阵 0-255
像元(Pixel,图像元素的简称)是数字图像中最小的单元,代表图像中的一个点。每个像元都有一个特定的颜色和亮度值,组合在一起形成完整的图像。以下是关于像元的一些关键点:
定义:像元是构成数字图像的基本单元。每个像元通常由多个颜色通道(如红色、绿色和蓝色)组成
- 每个像元的颜色通常用数字表示,这些数字对应于颜色空间中的值。例如,在 RGB 颜色空间中,每个像元可以用三个值(R、G、B)来表示,其中每个值的范围通常是 0 到 255。
- 例如,一个像元的 RGB 值为 (255, 0, 0) 表示该像元是红色
分辨率
- 图像的分辨率是指图像中像元的数量,通常以宽度 x 高度的形式表示。例如,1920x1080 的分辨率表示图像有 1920 列像元和 1080 行像元。
- 分辨率越高,图像中包含的像元数量越多,图像的细节和清晰度通常也越高。
- RGB 图像:波段数为 3(红色、绿色、蓝色)。
自己实现了两张图片的重叠(代码如下图)
# 导入所需的库
from PIL import Image # 导入PIL库中的Image模块,用于图像处理
import numpy as np # 导入NumPy库,用于数组操作
# 读取第一张图像并转换为NumPy数组
im1 = np.array(Image.open(r'D:\study pic\down.jpg')) # 使用PIL打开图像并转换为NumPy数组
# 将NumPy数组转换回图像对象
im_v = Image.fromarray(im1.astype('uint8')) # 将数组转换为uint8类型的图像对象
# im_v.show() # 显示图像(注释掉了)
# 读取第二张图像并转换为NumPy数组
im2 = np.array(Image.open(r'D:\study pic\下载.jpg')) # 同样的方式读取第二张图像
# 将第二张图像的NumPy数组转换回图像对象
im_v = Image.fromarray(im2.astype('uint8')) # 将第二张图像的数组转换为uint8类型的图像对象
# im_v.show() # 显示图像(注释掉了)
# 对两张图像进行简单的平均处理
# np.clip用于确保结果在0到255之间
im_t = np.clip(im1 / 2 + im2 / 2, 0, 255) # 将两张图像的像素值相加并取平均,确保结果在0到255之间
# 将处理后的数组转换回图像对象
im_v = Image.fromarray(im_t.astype('uint8')) # 将处理后的数组转换为uint8类型的图像对象
# 显示最终的图像
im_v.show() # 显示合成后的图像
实现了查看图片的参数,并且进行下采样显示(如下图)
from skimage import io,data ,color import numpy as np import matplotlib.pyplot as plt
-
from skimage import io, data, color
:io
: 提供了读取和写入图像的功能,比如从文件中读取图像或将图像保存到文件。data
: 包含一些示例图像,可以方便地用于测试和演示。color
: 提供了图像颜色空间转换的功能,比如将 RGB 图像转换为灰度图像等。
-
import numpy as np
:- NumPy 是一个用于高效计算的库,特别是处理数组和矩阵。它在图像处理中的应用非常广泛,因为图像通常可以用多维数组来表示。
-
import matplotlib.pyplot as plt
:- Matplotlib 是一个用于绘制图形的库,
pyplot
是其中一个模块,提供了类似 MATLAB 的绘图接口。它常用于可视化数据和图像。
- Matplotlib 是一个用于绘制图形的库,
# 读取图像
img = io.imread(r'D:\study pic\down.jpg')
# 显示图像(只显示一次)
plt.figure() # 创建一个新的图形窗口
plt.imshow(img) # 这行代码将图像img显示在当前的图形窗口中,并不会直接显示
plt.axis('off') # 关闭坐标轴的显示
plt.show() # 显示图形窗口中的内容(显示图像
# 打印图像信息
print(f'type: {type(img)}') # 打印图像类型
print(f'shape: {img.shape}') # 打印图像形状
print(f'width: {img.shape[1]}') # 图像宽度
print(f'height: {img.shape[0]}') # 图像高度
print(f'bands: {img.shape[2] if img.ndim == 3 else 1}') # 图像通道数(如果是灰度图,则为1)
print(f'size: {img.size}') # 图像总像素数
print(f'maxValue: {img.max()}') # 最大像素值
print(f'minValue: {img.min()}') # 最小像素值
print(f'meanValue: {img.mean()}') # 平均像素值
# 获取特定像素值
pixel = img[203, 1] # 注意:这里的索引应为 [y, x]
print(f'pixelValue: {pixel}') # 打印特定像素值
print(f'type(pixel): {type(pixel)}') # 打印像素值类型
# 进行图像切片并显示,会显示三次,第一次原图,第二次第三次都会变矮
for step in [0, 1, 2]:
r = img[::step + 1] # 这里使用 step + 1 以避免除以零的错误。暂时还不理解
plt.figure()
plt.imshow(r, cmap='gray') # 使用灰度色图显示
plt.axis('off') # 关闭坐标轴
plt.show() #显示图像
背了六级单词