首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

计算机视觉学习笔记(1):灰度图转换

一般一张彩色图片的每个像素由R,G,B三个通道分量叠加组成,一张灰度图片每个像素只有一个分量。怎样将一个彩色图像(RGB)转化成一个灰度图像呢?

常用的方法有以下三个:

(1)最大值法。对于灰度图像的每个像素(L),从RGB三个分量中选出最大值作为该像素的值,即

(2)平均值法。取RGB三个分量的平均值作为灰度图对应像素的值,即

(3)加权平均值法。给RGB三个分量不同的权重Wr,Wb,Wb,求加权平均值作为灰度图对应像素的值,即

由于人类对绿色最敏感,红色次之,蓝色最弱,因此,一般。

除此之外还有取其中一个通道值作为灰度值等其他方法,不再一一列举。

用python实现灰度图转化是简单的,我们可以采用PIL库来实现:

fromPILimportImage# 从PIL中导入Image模块

im = Image.open(‘cat.jpg’)# 打开我们的吴老师的头像

Im_gray = im.convert(‘L’)# 将图像变成黑白的

转换前后图片

PIL中采用ITU-R 601-2亮度转化标准:

我们可以看出,PIL采用了加权平均值法。

接下来,我们自己写代码实现以下这个简单的功能。

#导入必要的库

fromPILimportImage

importnumpyasnp

#打开吴老师的图片并转化成数组形式

im = np.array(Image.open(‘cat.jpg’))

im,im.shape#查看一下rgb图片的数组和形状

array([[[ 1, 1, 13],

[ 1, 1, 13],

[ 1, 1, 13],

...,

[ 0, 0, 10],

[ 0, 0, 10],

[ 0, 0, 10]],

...,

[[114, 96, 84],

[111, 93, 81],

[108, 90, 78],

...,

[199, 190, 183],

[202, 193, 186],

[203, 194, 187]]], dtype=uint8)

(220, 293, 3) # 这是im的数组的形状

我们可以直观的看出,彩色图片各个像素的三个通道的分量。接下来,写一个将这个彩色图片数组转换成灰度数组的函数。

defrgb_convert_gray(im):

#首先,将彩色图像的每个通道的矩阵转化成一维的

R= im[:,:,0].flatten()

G=im[:,:,1].flatten()

B=im[:,:,2].flatten()

#新定义一个与各个分量长度相同的一维数组,用来存放变换后的灰度值

im2=np.zeros(R.shape)

#采用加权平均公式

foriinrange(R.shape[0]):

im2[i] = R[i] * 299/1000 + G[i] * 587/1000 + B[i] * 114/1000

# 将计算好的以为数组转化为二维数组,并且整数化

im2=np.uint8(im2.reshape(im.shape[:,:,0]))

return im2

效果对比如下:

从左到右,分别是原图,PIL库转化的灰度图和我们自己写的函数转化效果

我们成功实现了灰度的转化。

另外,别的转化方法也是很简单的,效果也都相近,读者可以自己实现以下,以下只贴出各种方法的对比效果,如下:

从左到右分别是PIL库转换,加权平均法,平均值法,最大值法

欢迎关注我们的公众号

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180503G11PGN00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券