彩色图是由RGB三个通道组成,灰度图只有一个通道,也成为单通道图像,所以彩色图转换为灰度图的过程本质就是将RGB三通道合并成一个通道的过程。
灰度化实验的三种方法:最大值法、平均值法、加权平均值法
1 最大值法
最大值法就是从三个通道的值中选择最大值作为灰度后的数值,因此最大值法生成的灰度图会偏亮,适合给较暗的图像使用。
原图名1.png

import cv2 # OpenCV库,用于图像处理
import numpy as np # NumPy库,用于数值计算和数组操作
if __name__ == '__main__':
# 1. 图片输入
path = '1.jpg' # 定义图片路径
image_np = cv2.imread(path) # 使用OpenCV读取图片
"""
cv2.imread()函数:
- 参数:图片路径
- 返回值:NumPy数组,包含图像的像素数据
- 格式:BGR顺序(不是常见的RGB顺序)
- 形状:(高度, 宽度, 通道数)
"""
image_shape = image_np.shape # 获取图像的形状(尺寸信息)
print(image_shape) # (512, 512, 3)
# 打印图像尺寸(例如(512, 512, 3)表示高512像素,宽512像素,3个颜色通道)
# 2. 创建存储灰度图的数组
# 创建一个全黑的图像数组,尺寸与原图相同,3个通道,数据类型为无符号8位整数(0-255)
image_np_gray = np.zeros((image_shape[0], image_shape[1], 3), dtype=np.uint8)
"""
np.zeros()函数:
- 参数1:数组形状 (高度, 宽度, 通道数)
- 参数2:数据类型(uint8表示0-255的整数)
- 效果:创建一个全0(黑色)的图像数组
"""
# 3. 使用最大值法进行灰度化
# 遍历全局像素
"""image_shape==(512, 512, 3)"""
for i in range(image_shape[0]): # 遍历每一行(高度方向)
for j in range(image_shape[1]): # 遍历每一列(宽度方向)
# 获取当前像素的BGR值
b, g, r = image_np[i, j] # 解包为三个变量
"""
图像像素访问:
- image_np[i, j] 返回一个包含三个值的数组 [B, G, R]
- Python的元组解包:b, g, r = [B, G, R] 分别赋值
"""
# 最大值法:取三个通道中的最大值作为灰度值
max_val = max(b, g, r) # 使用Python内置的max函数
"""
最大值法原理:
- 对于每个像素,取它的B、G、R三个通道中的最大值
- 这

最低0.47元/天 解锁文章
2505

被折叠的 条评论
为什么被折叠?



