Python实现数字图像处理经典算法之256色转灰度图

算法介绍

256色转灰度图是数字图像处理经典算法中最简单的算法之一

1、彩色数字图像中的颜色有红、绿、蓝三种颜色混合而成,对应的像素颜色通道就是RGB(R,G,B),R、G、B数值共有256个数值,也称为256阶,即0—255,计算机通过读取每一个通道的数值而确定显示的颜色。

2、灰度图像只有一个灰度色阶通道,我们可以标记为Gray,或者RGB(Gray、Gray、Gray),Gray共有256阶,即0—255,计算机通过读取该通道的值确定显示的颜色。

那么将彩色图像转换为灰色图像的思路就是将RGB数值转化为Gray数值。共有5种转化方式:
(1)浮点算法 :Gray=R * 0.3+G * 0.59+B * 0.11
(2)整数算法:Gray=(R * 30+G * 59+B * 11)/100
(3)移位算法:Gray =(R28+G151+B*77)>>8
(4)平均值法:Gray=(R+G+B)/3
(5)仅取绿色:Gray=G
下面我将使用Python语言分别实现上述5种方法并查看效果,操作的图像如下所示:
操作的图像

代码实现

在介绍实现代码之前先介绍我们代码中借助的一个类库Matplotlib,它提供了将图像转化为数组的方法array,我们得到图像数组后可以使用坐标得到图像的颜色元组,里面有我们需要的颜色数值信息。
(1)浮点算法 :Gray=R * 0.3+G * 0.59+B * 0.11
代码如下:

from PIL import Image
from pylab import *

im = array(Image.open('flower.jpg'))
im[:,:,0] = im[:,:,1] = im[:,:,2] = (im[:,:,0] * 0.3 + im[:,:,1] * 0.59 + im[:,:,2] * 0.11)
imshow(im)
show()

效果如下:
在这里插入图片描述
代码讲解:
1、array(Image.open(‘flower.jpg’))可以将一个图像打开并且转化为数组类型,数据类型为元组,里面包含RGB数值信息
2、im[x,y,t]表示(x,y)坐标像素的t通道的数值,不明白 :的话建议复习Python,im[:,:,0] = im[:,:,1] = im[:,:,2] = (im[:,:,0] * 0.3 + im[:,:,1] * 0.59 + im[:,:,2] * 0.11)就将所有像素的所有通道值都改为重新计算后的值,也就是我们的浮点算法
3、最后是显示图像。

(4)平均值法:Gray=(R+G+B)/3
代码如下:

from PIL import Image
from pylab import *

im = array(Image.open('flower.jpg'))
im[:,:,0] = im[:,:,1] = im[:,:,2] = (im[:,:,0] + im[:,:,1] + im[:,:,2])/3
imshow(im)
show()

效果如下:
在这里插入图片描述
代码讲解:
其实和上一个大体一样,只是算法不一样

(5)仅取绿色:Gray=G
代码如下:

from PIL import Image
from pylab import *

im = array(Image.open('flower.jpg'))
im[:,:,0] = im[:,:,1] = im[:,:,2] = im[:,:,2]
imshow(im)
show()

效果如下:
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值