【灰度实验】——图像预处理(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(纯白)
相关推荐
fanstuck5 小时前
1M 上下文能怎么用?我用 Seed Evolving 做了一个招标文件版本差异审查器
服务器·人工智能·数据分析·开源·aigc
墨舟的AI笔记7 小时前
React 组件库的 Tree Shaking:按需加载与副作用的工程化治理
人工智能
WoooChi7 小时前
DailyTech-20260724
人工智能·科技·业界资讯
zh路西法7 小时前
【CAM Grad-CAM Grad-CAM++】深度学习模型可解释性:从原理到YOLOv8部署实战
人工智能·深度学习·yolo·yolov8·grad-cam·cam
雨辰AI8 小时前
全集实战:企业级大模型服务化部署全栈指南|FastAPI 封装 + Nginx 负载均衡 + 高可用架构 从单机到生产一步到位
人工智能·ai·负载均衡·fastapi·ai编程
触底反弹8 小时前
Vibe Coding 不写 Git,等于悬崖边飙车
人工智能·git·面试
咖啡屋和酒吧8 小时前
健康管理:现代生活的科学守护
人工智能·生活·精选
星栈独行8 小时前
翻完 Pi 源码:它和 Codex、Claude Code 有何不同
开发语言·javascript·人工智能·程序人生
没有梦想的咸鱼185-1037-16639 小时前
AI-Python机器学习与深度学习技术:CNN/Transformer/扩散模型、SHAP可解释及Hermes智能体自动化
人工智能·python·深度学习·机器学习·chatgpt·cnn·transformer
船漏了就会沉9 小时前
Kimi K3 vs DeepSeek-V4:国产大模型的技术路线之争
人工智能