数字图像处理的python实践(1)——RGB转灰度

本文介绍了使用Python的PIL库进行数字图像处理,特别是如何将RGB图像转换为灰度图像。通过理解RGB转灰度的数学原理,作者实现了相关代码,并展示了转换过程。在实践中,注意到Image.fromarray方法要求输入数据格式为unit8。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        之前接触过PIL(Python Image Library)这个python很方便的图像处理的库,其中封装了不少与图像处理相关的内容。最近在从零开始学习数字图像处理,了解了许多处理的数学原理,凡是数学相关的东西,如果没有自己动手算个几次,称不上对这个内容有所了解。

       首先是RGB转灰度图,原理自然是将三个通道的数值计算后得到一个通道的数值。PIL.Image对象有一个方法convert,在官方文档中就写了使用的公式是

L=R*299/1000+G*587/1000+B*114/1000

于是采用相同的公式,通过简单的代码,计算得到的图像和原图像如下。注意,使用Image.fromarray方法接受的对象需要数值格式是unit8,否则会报错。

from PIL import Image
import numpy as np

jpg_path = "C:/Users/60214/Desktop/python_work/DigitalExecution/girl.jpg"

im = Image.open(jpg_path)
imarray = np.array(im)
height, width, _ = imarray.shape

new_imarray = np.zeros((height, width), dtype = 'uint8')

print(new_imarray.dtype)
def RGB2Gray(R, G, B):
	res = int(0.299 * R + 0.587 * G + 0.114 * B)
	if res > 255:
		return 255
	else:
		return res

for i in 
### 数字图像处理中的RGB灰度图方法 在数字图像处理领域,将彩色图像(通常表示为RGB格式)换为灰度图像是常见的预处理步骤之一。这一过程可以通过加权平均法来完成,在该方法中红色(R)、绿色(G)以及蓝色(B)三个通道按照一定权重相加以获得最终的亮度值作为像素的新颜色[^1]。 对于基于FPGA实现RGB到Gray Scale(灰阶)的变化而言,可以采用如下公式计算每一个像素点对应的灰度值: \[ Y = 0.299R + 0.587G + 0.114B \] 其中\(Y\)代表输出的灰度级别;而系数则反映了人类视觉系统对不同色彩敏感程度的不同——即更重视绿光部分,其次是红光,最后是蓝光。 下面是Python语言下简单的RGB灰度函数示例代码: ```python import numpy as np def rgb_to_gray(image_rgb): """ 将输入的三通道RGB图片数组化为单通道灰度图 参数: image_rgb (numpy.ndarray): 输入的三维NumPy数组, 形状为(height,width,channels=3), 类型uint8 返回: numpy.ndarray: 输出的一维灰度图数组, 形状为(height,width),类型float64 """ # 使用上述提到的比例因子乘以各分量并求和得到新的二维矩阵 gray_image = 0.299 * image_rgb[:, :, 0] + \ 0.587 * image_rgb[:, :, 1] + \ 0.114 * image_rgb[:, :, 2] return gray_image.astype(np.float64) ``` 此段程序接收一个形状为`(height, width, channels)` 的 NumPy 数组作为参数,并返回同样大小但是只有一层深度的结果数组,每一项都经过了线性变换成为介于0至255之间的浮点数形式的灰度级数值。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值