图像亮度调整

任务描述
背景
  亮度调整是数字图像处理基本操作之一,如下图所示。
在这里插入图片描述
在这里插入图片描述
题外话:该图是图像处理领域知名度最高的图像之一,被广泛用于图像处理技术效果的测试,图中人物叫 Lena。
  根据 RGB 颜色的原理可知,要调整一个颜色的亮度,可以将红、绿、蓝三个颜色分量都加上相同的调整量 n,n 是 [−255,255] 之间的整数,例如,当 n 为 50 时,RGB颜色 (148,65,93) 变为 (198,115,143),效果见下图。
  在这里插入图片描述
任务
  本关任务是实现函数enhancePixel(r, g, b, n),其功能是利用上述方法调整一个 RGB 颜色的亮度。说明如下:
  1)参数r、g、b均为整数,分别表示一个 RGB 颜色的红、绿、蓝分量,参数n也为整数,表示亮度的调整量,r、g、b的值一定属于 [0,255],n的值一定属于 [−255,255];
  2)返回值er、eg、eb均为整数,表示按上述方法调整亮度后的 RGB 颜色,例如,参数r、g、b、n分别为148、65、93、50时,则er、eg、eb分别为198、115、143;
  3)需注意的是,调整后的颜色分量取值可能小于 0 或大于 255,若小于 0,则取 0,若大于 255,则取 255,例如,当 n 为 −100 时,RGB 颜色 (148,65,93) 调整后为 (48,0,0);
  此外,初始代码中的enhanceImg函数会利用此函数调整一幅图像中所有像素的亮度,请看懂代码,后续关卡会用到类似的程序结构。

相关知识
  略。

编程要求
  在 Begin-End 区间实现enhancePixel(r, g, b, n)函数,具体要求见上。

测试说明
  测试集正确结果如下:

(148, 65 , 93 ) ->   50 -> (198, 115, 143)
(1  , 10 , 100) ->   99 -> (100, 109, 199)
(200, 200, 200) ->  200 -> (255, 255, 255)
(10 , 10 , 10 ) ->  -20 -> (0  , 0  , 0  )
(100, 200, 255) -> -200 -> (0  , 0  , 55 )

你的图像与正确答案相同!
  说明如下:
  1)系统会调用你编写的enhancePixel函数,并以“原始颜色 -> 调整量 -> 调整后的颜色”的格式打印结果,如测试集第 1 行的(148, 65 , 93 ) -> 50 -> (198, 115, 143)表示:(148,65,93) 亮度调整 50 后得 (198,115,143);
  2)此外,系统会检查程序生成的 step1_2.jpg 文件,若正确则在测试集最后一行打印你的图像与正确答案相同!。

开始你的任务吧,祝你成功!

from PIL import Image


########## Begin ##########
# 调整一个像素的亮度
def enhancePixel(r, g, b, n):
    er, eg, eb = r + n, g + n, b + n
    if 255 < er:
        er = 255
    elif 0 > er:
        er = 0
    if 255 < eg:
        eg = 255
    elif 0 > eg:
        eg = 0
    if 255 < eb:
        eb = 255
    elif 0 > eb:
        eb = 0
    return er, eg, eb


########## End ##########

# 调整图像文件1中所有像素的亮度,并将调整结果保存为图像文件2
# 图像文件1和2的路径分别为path1和path2,n为调整量
def enhanceImg(path1, path2, n):
    img = Image.open(path1)
    w, h = img.size
    for x in range(w):
        for y in range(h):
            r, g, b = img.getpixel((x, y))  # 取出颜色
            er, eg, eb = enhancePixel(r, g, b, n)  # 调整亮度
            img.putpixel((x, y), (er, eg, eb))  # 放回像素
    img.save(path2)


path1 = 'step1.jpg'  # 原始图像文件
path2 = 'step1_2.jpg'  # 调整亮度后的图像文件
n = 50  # 调整量
enhanceImg(path1, path2, 50)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值