【灰度实验】——图像预处理(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(纯白)
相关推荐
TechubNews几秒前
关于我们 About Techub News
人工智能·区块链
bin91531 分钟前
AI工具赋能Python开发者:项目开发中的创意守护与效率革命
开发语言·人工智能·python·工具·ai工具
我是场3 分钟前
AI入门 - 什么是ARM SME2 AI加速指令集
arm开发·人工智能
paopaokaka_luck9 分钟前
基于SpringBoot+Vue的DIY手工社预约管理系统(Echarts图形化、腾讯地图API)
java·vue.js·人工智能·spring boot·后端·echarts
出门吃三碗饭1 小时前
如何在LLM大语言模型上微调来优化数学推理能力?
android·人工智能·语言模型
小白狮ww1 小时前
清华联合字节推出 HuMo,实现三模态协同生成人物视频
人工智能·深度学习·机器学习·音视频·视频生成·多模态模型·人物视频
RAG专家3 小时前
【Mixture-of-RAG】将文本和表格与大型语言模型相结合
人工智能·语言模型·rag·检索增强生成
星期天要睡觉6 小时前
自然语言处理(NLP)——自然语言处理原理、发展历程、核心技术
人工智能·自然语言处理
低音钢琴6 小时前
【人工智能系列:机器学习学习和进阶01】机器学习初学者指南:理解核心算法与应用
人工智能·算法·机器学习
飞翔的佩奇7 小时前
【完整源码+数据集+部署教程】【天线&水】舰船战舰检测与分类图像分割系统源码&数据集全套:改进yolo11-repvit
前端·python·yolo·计算机视觉·数据集·yolo11·舰船战舰检测与分类图像分割系统