图像亮度调整

这篇具有很好参考价值的文章主要介绍了图像亮度调整。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

非线性方式

调整图像的方法有很多,最常用的方法就是对图像像素点的R、G、B三个分量同时进行增加(减少)某个值,达到调整亮度的目的。即改变图像的亮度,实际就是对像素点的各颜色分量值做一个平移。这种方法属于非线性的亮度调整,优点是代码简单、速度快,缺点是在调整亮度的同时,也损失了图像的色彩的纯度。

def adjust_brightness_avg(img, brightness=0.35):
    [avg_b, avg_g, avg_r] = np.array(cv2.mean(img))[:-1] / 3
    k = np.ones((img.shape))
    k[:, :, 0] *= avg_b
    k[:, :, 1] *= avg_g
    k[:, :, 2] *= avg_r
    img = img + brightness * k
    # img = img + (1 + brightness) * img
    img[img < 0] = 255
    img[img > 255] = 255

    return img.astype(np.uint8)

HSL颜色空间方式(线性方式)

利用HSL颜色空间,通过只对其L(亮度)部分调整,可达到图像亮度的线性调整。但是RGB和HSL颜色空间的转换很繁琐,一般还需要浮点数的运算,不仅增加了代码的复杂度,更重要的是要逐点将RGB转换为HSL,然后确定新的L值,再将HSL转换为RGB,运行速度慢。要想提高图像线性调整的速度,应该将浮点运算变为整数运算,只提取HSL的L部分进行调整。优点是调整过的图像层次感很强,缺点是代码复杂,调整速度慢,而且当图像亮度增减量较大时有很大的失真。

# def adjust_brightness_rgb(img, brightness=0.35):
#     #[0-100]->[-255, 255]
#     # brightness = brightness * (255 - (-255)) + (-255)
#     brightness = brightness * 255
#     print(brightness)
#     brightness = -100
#     img = img * 1.0
#     r = img[:, :, 0]
#     g = img[:, :, 1]
#     b = img[:, :, 2]
#
#     #求出原始图像亮度分量
#     l = (img[:, :, 0] + img[:, :, 1] + img[:, :, 2]) / 3.0 + 0.001
#
#     mask_1 = l > 128.0
#     #利用原始图像的亮度分量结合R, G, B求出HSL空间的H, S;
#     rhs = (r * 128.0 - (l - 128.0) * 256.0) / (256.0 - l)
#     ghs = (g * 128.0 - (l - 128.0) * 256.0) / (256.0 - l)
#     bhs = (b * 128.0 - (l - 128.0) * 256.0) / (256.0 - l)
#
#     rhs = rhs * mask_1 + (r * 128.0 / l) * (1 - mask_1)
#     ghs = ghs * mask_1 + (g * 128.0 / l) * (1 - mask_1)
#     bhs = bhs * mask_1 + (b * 128.0 / l) * (1 - mask_1)
#     #然后求出新的亮度值 亮度的调整增量(-255,255)
#     l_new = l + brightness - 128.0
#     #再利用新的亮度值结合H,S,求出新的R,G,B分量
#     mask_2 = l_new > 0.0
#
#     r_new = rhs + (256.0 - rhs) * l_new / 128.0
#     g_new = ghs + (256.0 - ghs) * l_new / 128.0
#     b_new = bhs + (256.0 - bhs) * l_new / 128.0
#
#     r_new = r_new * mask_2 + (rhs + rhs * l_new / 128.0) * (1 - mask_2)
#     g_new = g_new * mask_2 + (ghs + ghs * l_new / 128.0) * (1 - mask_2)
#     b_new = b_new * mask_2 + (bhs + bhs * l_new / 128.0) * (1 - mask_2)
#
#     img_out = img * 1.0
#
#     img_out[:, :, 0] = r_new
#     img_out[:, :, 1] = g_new
#     img_out[:, :, 2] = b_new
#
#     img_out = img_out / 255.0
#
#     # 饱和处理
#     mask_3 = img_out < 0
#     mask_4 = img_out > 1
#
#     img_out = img_out * (1 - mask_3)
#     img_out = img_out * (1 - mask_4) + mask_4
#
#     return img_out
def adjust_brightness_hls(img, brightness):#img is [0-1]
    img = img.astype(np.float32) / 255.0
    # BGR2HLS
    img_hls = cv2.cvtColor(img, cv2.COLOR_BGR2HLS)
    # adjust light(linear transform)
    img_hls[:, :, 1] = (1.0 + 0.35) * img_hls[:, :, 1]
    img_hls[:, :, 1][img_hls[:, :, 1] > 1] = 1
    # #adjust saturation
    # img_hls[:, :, 2] = (1.0 + 0.2) * img_hls[:, :, 2]
    # img_hls[:, :, 2][img_hls[:, :, 2] > 1] = 1
    # HLS2BGR
    img_ls = cv2.cvtColor(img_hls, cv2.COLOR_HLS2BGR) * 255
    # img_ls = np.clip(img_ls, 0, 255).astype(np.uint8)
    return img_ls

alpha合成方式(线性方式)

图像亮度调整的目的是什么,图像处理,颜色空间,算法,python,计算机视觉,人工智能

def adjust_brightness_linear(img, brightness):#brightness arange [-1, 1]
    if brightness <= 0:
        img_out = img * (1 - brightness) + brightness * 255
    else:
        img_out = img * (1 + brightness) + brightness * 0

    return img_out

亮度和对比度同时调整

图像亮度调整的目的是什么,图像处理,颜色空间,算法,python,计算机视觉,人工智能
图像亮度调整的目的是什么,图像处理,颜色空间,算法,python,计算机视觉,人工智能

总结

图像亮度调整的目的是什么,图像处理,颜色空间,算法,python,计算机视觉,人工智能

import cv2
import sys
import numpy as np
import matplotlib.pyplot as plt
 
"""
  基于RGB空间亮度调整算法:
  主要是对RGB空间进行亮度调整。计算出调整系数后,调整手段主要有两种:
    1) 基于当前RGB值大小进行调整,即R、G、B值越大,调整的越大,
    例如:当前像素点为(100,200,50),调整系数1.1,则调整后为(110,220,55);
    2) 不考虑RGB值大小的影响,即始终对各个点R、G、B值进行相同的调整,
    例如:当前像素点为(100,200,50),调整系数10/255,则调整后为(110,210,60)。
"""
def RGBAlgorithm(rgb_img, value=0.5, basedOnCurrentValue=True):
    img = rgb_img * 1.0
    img_out = img
    
    # 基于当前RGB进行调整(RGB*alpha)
    if basedOnCurrentValue:
        # 增量大于0,指数调整
        if value >= 0 :
            alpha = 1 - value
            alpha = 1/alpha
 
        # 增量小于0,线性调整
        else:
            alpha = value + 1
            
        img_out[:, :, 0] = img[:, :, 0] * alpha
        img_out[:, :, 1] = img[:, :, 1] * alpha
        img_out[:, :, 2] = img[:, :, 2] * alpha
            
    # 独立于当前RGB进行调整(RGB+alpha*255)
    else:
        alpha = value
        img_out[:, :, 0] = img[:, :, 0] + 255.0 * alpha
        img_out[:, :, 1] = img[:, :, 1] + 255.0 * alpha
        img_out[:, :, 2] = img[:, :, 2] + 255.0 * alpha
        
    img_out = img_out/255.0
    
    # RGB颜色上下限处理(小于0取0,大于1取1)
    mask_3 = img_out  < 0 
    mask_4 = img_out  > 1
    img_out = img_out * (1-mask_3)
    img_out = img_out * (1-mask_4) + mask_4
    
    return img_out
 
"""
  基于HSV空间亮度调整算法:
  主要是对HSV空间的亮度V值进行调整。计算出调整系数后,调整手段主要有两种:
    1) 基于当前V值大小进行调整,即V值越大,调整的越大,
    例如:当前像素点V值为200,调整系数1.1,则调整后为220;
    2) 不考虑V值大小的影响,即始终对各个V值进行相同的调整,
    例如:当前像素点V值为200,调整系数10/255,则调整后为210。
"""
def HSVAlgorithm(rgb_img, value=0.5, basedOnCurrentValue=True):
    hsv_img = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2HSV)
    img = hsv_img * 1.0
    img_out = img
    
    # 基于当前亮度进行调整(V*alpha)
    if basedOnCurrentValue:
        # 增量大于0,指数调整
        if value >= 0 :
            alpha = 1 - value
            alpha = 1/alpha
 
        # 增量小于0,线性调整
        else:
            alpha = value + 1
        img_out[:, :, 2] = img[:, :, 2] * alpha
    
    else :
        alpha = value
        img_out[:, :, 2] = img[:, :, 2] + 255.0 * alpha
    
    # HSV亮度上下限处理(小于0取0,大于1取1)
    img_out = img_out/255.0
    mask_1 = img_out  < 0 
    mask_2 = img_out  > 1
    img_out = img_out * (1-mask_1)
    img_out = img_out * (1-mask_2) + mask_2
    img_out = img_out * 255.0
    
    # HSV转RGB
    img_out = np.round(img_out).astype(np.uint8)
    img_out = cv2.cvtColor(img_out, cv2.COLOR_HSV2RGB)
    img_out = img_out/255.0
    
    return img_out
 
path = './resource/fruit.bmp'
value = 0.3  # 范围-1至1
basedOnCurrentValue = True  # 0或者1
 
# run : python Lightness.py (path) (value) (basedOnCurrentValue)
if __name__ == "__main__":
    len = len(sys.argv)
    if len >= 2 :
        path = sys.argv[1]
        if len >= 3 :
            value = float(sys.argv[2])
            if len >= 4 :
                basedOnCurrentValue = bool(int(sys.argv[3]))
 
    img = cv2.imread(path)
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    img_rgb = RGBAlgorithm(img, value, basedOnCurrentValue)
    img_hsv = HSVAlgorithm(img, value, basedOnCurrentValue)
 
    plt.figure("img_original")
    plt.imshow(img/255.0)
    plt.axis('off')
 
    plt.figure("img_light_rgb")
    plt.imshow(img_rgb)
    plt.axis('off')
 
    plt.figure("img_light_hsv")
    plt.imshow(img_hsv)
    plt.axis('off')
 
    plt.show()

参考资料
GDI+ 在Delphi程序的应用 – 调整图像亮度
GDI+ 在Delphi程序的应用 – ColorMatrix与图像亮度
Python实现PS图像明亮度调整效果示例(python调节图片亮度)
OpenCV图像处理|1.7 调整图像亮度与对比度
改进的图像线性亮度调整方法
OpenCV 基于RGB三原色的基本线性变换 改变图像颜色和亮度 对比度增强算法
图像处理——亮度调整算法(python语言)
图像处理——对比度调整算法(python语言)文章来源地址https://www.toymoban.com/news/detail-775924.html

到了这里,关于图像亮度调整的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【图像处理】Python判断一张图像是否亮度过低,图片模糊判定

    比如: 直方图: 代码: 这段代码是一个用于判断图像亮度是否过暗的函数is_dark,并对输入的图像进行可视化直方图展示。 首先,通过import语句导入了cv2和matplotlib.pyplot模块,用于图像处理和可视化。 is_dark函数的作用是判断输入图像的平均亮度是否低于设定的阈值。函数接

    2024年02月16日
    浏览(56)
  • C#使用OpenCv(OpenCVSharp)图像处理实例:亮度、对比度、灰度

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行亮度、对比度、灰度处理。 目录 亮度和对比度原理 灰度 实例 图像亮度通俗理解便是图像的明暗程度,数字图像 f(x,y) = i(x,y) r(x, y) ,如果灰度值在[0,255]之间,则 f 值越接近0亮度越低,f 值越接近255亮度越

    2024年02月13日
    浏览(76)
  • python图像处理——图像压缩(调整图片的存储大小)

    前言 很多时候拍的图片都是几百KB 甚至多少M来算的,有时候证件照要求的又很小,作为一个程序员,总不能老是在网上找压缩的吧,而且又麻烦,不如自己用程序跑跑啦 懒得写太详细注释了,不懂可以问噢,后续会把不懂的放上来,或者优化代码 点赞或收藏可以鼓励作者加

    2024年03月11日
    浏览(74)
  • python 图像处理——图像分割及经典案例篇之基于颜色的图像分割

    前言 作者在第一部分向大家介绍了图像处理的基础知识,第二部分介绍了图像运算和图像增强,接下来第三部分我们将详细讲解图像分割及图像处理经典案例,该部分属于高阶图像处理知识,能进一步加深我们的理解和实践能力。图像分割是将图像分成若干具有独特性质的区

    2024年02月11日
    浏览(56)
  • Opencv C++图像处理:亮度+对比度+饱和度+高光+暖色调+阴影+漫画效果+白平衡+浮雕+羽化+锐化+颗粒感

    更多详细信息请看:OpenCV专栏:翟天保Steven

    2024年02月04日
    浏览(55)
  • iTOP-3568开发板使用OpenCV处理图像-颜色转换

    本小节代码在配套资料“iTOP-3568 开发板\\03_【iTOP-RK3568 开发板】指南教程 \\04_OpenCV 开发配套资料\\05”目录下,如下图所示: cv2.cvtColor()函数功能: 将一幅图像从一个色彩空间转换到另一个色彩空间。 函数原型: cv2.cvtColor(src,code,dst=None,dstCn=None) 参数定义: src:要转换的源文件

    2024年02月12日
    浏览(40)
  • Python-OpenCV中的图像处理-颜色空间转换

    在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会 发现我们经常用到的也就两种: BGR G r a y 和 B G R Gray 和 BGR G r a y 和 BGR HSV。 注意:在 OpenCV 的 HSV 格式中, H(色彩/色度)的取值范围是 [0, 179],S(饱和度)的取值范围 [0, 255], V(亮度)的取值范围 [0,

    2024年02月13日
    浏览(43)
  • 模式识别与图像处理课程实验一:图像处理实验(颜色算子实验、Susan、Harris角点检测实验、 sobel边缘算子检测实验)

    要求编写一个包含颜色算子,Susan,Harris,角点,sobel边缘算子的程。 实验的程序如下 运行结果如下 实验原图 实验结果图 实验的程序如下 运行结果如下 实验原图 实验结果图 实验的程序如下 运行结果如下 实验原图 实验结果图 Susan角点检测程序如下 运行结果如下 实验原图

    2024年02月02日
    浏览(50)
  • 计算机视觉--利用HSV和YIQ颜色空间处理图像噪声

    前言: Hello大家好,我是Dream。 今天我们将 利用HSV和YIQ颜色空间处理图像噪声 。在本次实验中,我们使用任意一张图片,通过 RGB转HSV和YIQ 的操作,加入了 椒盐噪声 并将其转 换回RGB 格式,最终实现对 图像的噪声处理 。一起来看看吧~ 首先,我们导入需要的库。包括numpy用

    2024年02月15日
    浏览(69)
  • opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间

    本专栏代码地址 https://github.com/xiawei20161308104/xv_opencv_tutorials 本节代码路径 xv_opencv_tutorials/ImageProcessinginOpenCV/changing_colorspaces.py 参考 图像工程第4版,张毓晋,清华大学出版社 颜色空间转化函数 cv.cvtColor() “Indeed rays,properly expressed,are not colored”——牛顿。 光线为不同频率的电

    2024年02月03日
    浏览(87)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包