【灰度实验】——图像预处理(OpenCV)

目录

[1 灰度图](#1 灰度图)

[2 最大值法](#2 最大值法)

[3 平均值法](#3 平均值法)

[4 加权均值法](#4 加权均值法)

[5 两个极端的灰度值](#5 两个极端的灰度值)


将彩色图转为灰度图地过程称为灰度化。

灰度图是单通道图像,灰度化本质就是将彩色图的三通道合并成一个通道的过程。三种合并方法:最大值法,平均值法和加权均值法。

1 灰度图

灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度。

2 最大值法

从彩色图像的R、G、B三个通道的值中选出最大的一个作为灰度图像中对应位置的像素值。

例如某图像中某像素点的像素值如上图所示,那么在使用最大值法进行灰度化时,就会从该像素点对应的RGB通道中选取最大的像素值作为灰度值,所以在灰度图中的对应位置上,该像素点的像素值就是121。

案例:

python 复制代码
import cv2 as cv
import numpy as np
# 灰度化:最大值法:图像大小不变,像素点个数不变,通道数由3变1,像素值会变,变成三个通道里的最大值
pig = cv.imread("../day02/images/pig.png")
# 获取原图大小,形状
h,w,_ = pig.shape
# 创建一个和原图一样大小的图像,放像素,拿这张图就是灰度化后的图
gray = np.zeros((h,w),dtype=np.uint8)
# 遍历原图,取出每个像素点,拿到三个通道里面的最大像素值,放进创建的图像里面
# 遍历行
for i in range(h):
    # 遍历列
    for j in range(w):
        # 取出每个像素点 img[i,j] [200,200,99]
        # gray[i,j] = max(pig[i,j][0],pig[i,j][1],pig[i,j][2])
        gray[i,j]=max(pig[i,j])
# 显示图像,看看效果
cv.imshow("pig",pig)
cv.imshow("gray",gray)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| | |
| 原图 | 灰度图(最大值法) |

3 平均值法

从彩色图像的R、G、B三个通道取平均值作为灰度图像中对应位置的像素值。

例如某图像中某像素点的像素值如上图所示,那么在使用平均值进行灰度化时,其计算结果就是(91+121+46)/3=86(对结果进行取整),所以在灰度图中的对应位置上,该像素点的像素值就是86。

案例:

python 复制代码
import cv2 as cv
import numpy as np
# 灰度化:最大值法:图像大小不变,像素点个数不变,通道数由3变1,像素值会变,变成三个通道里的最大值
pig = cv.imread("../day02/images/pig.png")
# 获取原图大小,形状
h,w,_ = pig.shape
# 创建一个和原图一样大小的图像,放像素,拿这张图就是灰度化后的图
gray = np.zeros((h,w),dtype=np.uint8)
# 遍历原图,取出每个像素点,拿到三个通道里面的最大像素值,放进创建的图像里面
# 遍历行
for i in range(h):
    # 遍历列
    for j in range(w):
        gray[i,j] = np.uint8(((int(pig[i,j,0])+int(pig[i,j,1])+int(pig[i,j,2]))//3)) # 使用int()是为了防止np.uint8溢出,最后再转回去即可
# 取出每个像素点 img[i,j] [200,200,99]
# 显示图像
cv.imshow("pig",pig)
cv.imshow("gray",gray)
print(pig.shape,gray.shape)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| | |
| 原图 | 灰度图(平均值法) |

4 加权均值法

彩色图像每个通道乘以一定的权重在相加得到灰度图像对应位置的像素值。

例如某图像中某像素点的像素值如上图所示,那么在使用加权平均值进行灰度化时,其计算结果就是10*0.299+121*0.587+46*0.114=79。所以在灰度图中的对应位置上,该像素点的像素值就是79。

案例:

python 复制代码
import cv2 as cv
import numpy as np
# 灰度化:最大值法:图像大小不变,像素点个数不变,通道数由3变1,像素值会变,变成三个通道里的最大值
pig = cv.imread("../day02/images/pig.png")
# 获取原图大小,形状
h,w,_ = pig.shape
# 定义三个通道上的权重
wr = 0.299
wg = 0.587
wb = 0.114
# 创建一个和原图一样大小的图像,放像素,拿这张图就是灰度化后的图
gray = np.zeros((h,w),dtype=np.uint8)
# 遍历原图,取出每个像素点,拿到三个通道里面的最大像素值,放进创建的图像里面
# 遍历行
for i in range(h):
    # 遍历列
    for j in range(w):
        # 取出每个像素点 img[i,j] [200,200,99]
        # R:0.299 G:0.587 B:0.114
        gray[i,j] = round(pig[i,j,0]*wb + pig[i,j,1]*wg + pig[i,j,2]*wr)
# 显示图像
cv.imshow("pig",pig)
cv.imshow("gray",gray)
print(pig.shape,gray.shape)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| | |
| 原图 | 灰度图(加权均值法) |

5 两个极端的灰度值

在灰度图像中,"极端"的灰度值指的是亮度的两个极端:最暗和最亮的值。

  • 最暗的灰度值:0。这代表完全黑色,在灰度图像中没有任何亮度。

  • 最亮的灰度值:255。这代表完全白色,在灰度图像中具

灰度值为0(纯黑) 灰度值为255(纯白)
相关推荐
Anhty6 小时前
2026九月最新变声器测评:iOS安卓双端适配,低延迟运行更稳定
android·人工智能·功能测试·ios·智能手机
DisonTangor7 小时前
【腾讯混元雪耻归来】 Hy4 preview:770B 参数 MoE 旗舰模型,1M 上下文全面开源
人工智能·算法·开源·aigc·腾讯云·腾讯云ai代码助手
luckystar513~7 小时前
Hermes 实战 :系列收官/生产化——安全审计与运维
运维·人工智能·安全·agent·智能体开发·hermes实战·智能体网关
Mickey Q7 小时前
【深度学习】数值稳定性和模型初始化
人工智能·深度学习
冬奇Lab7 小时前
Code Agent 解剖(20):从零扩展——给 agent 加一个新工具
人工智能·开源
论文复现现场7 小时前
RTX 4090 24GB 能跑 Qwen3.8-27B 吗?单卡显存计算与云端部署指南
人工智能·python·云计算·llama·gpu算力
七牛云行业应用7 小时前
Harness Engineering 是什么:从“写提示词“到“设计 Agent 边界“的工程方法论
人工智能·agent·ai编程
科技拓维者7 小时前
短视频配音音效去哪里找比较好?短视频创作者音效指南
人工智能·音视频
cjy0001117 小时前
2026AI 产品如何从一次性 Demo 变成可重复使用的业务工具?
前端·人工智能·fde
大模型码小白8 小时前
AI大模型接入SDK:人工智能核心概念与发展史
大数据·运维·人工智能·安全·prompt