找回密码
 会员注册
查看: 29|回复: 0

opencv-python图像增强七:图像亮度对比度饱和度调整

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64753
发表于 2024-9-4 00:51:57 | 显示全部楼层 |阅读模式
文章目录一,简介二,图像亮度对比度修改三,对比度增强:一,简介在图像处理领域,对比度、亮度和饱和度是影响图像视觉效果的重要因素。合理调整这三个参数,可以使图像更具表现力,满足不同场景的需求。本文将带领大家使用OpenCV,这一强大的开源计算机视觉库,轻松实现图像对比度、亮度和饱和度的修改。本文将从基础知识入手,详细介绍如何使用OpenCV对图像进行操作,包括对比度、亮度和饱和度的调整。二,图像亮度对比度修改图像的亮度和对比度是图像质量感知的两个基本属性,它们共同决定了图像的视觉效果。亮度指的是图像中像素的明暗程度。在数字图像中,亮度通常由像素值直接表示。亮度的调整会改变图像的整体明暗水平,但不影响图像中不同颜色或灰度之间的相对关系。提高亮度会使图像看起来更明亮,降低亮度则使图像变暗。在某些情况下,调整亮度可以改善图像在特定光照条件下的可视性。对比度指的是图像中最亮和最暗部分的差异程度。高对比度图像具有清晰、分明的明暗区分,而低对比度图像则明暗区分不够明显,看起来更为模糊和平淡。对比度的调整会影响图像中细节的可见性,使得图像中的边缘和纹理更加突出或更加柔和。在opencv中有一个方法可以实现调整图像的亮度和对比度操作cv2.convertScaleAbs()函数说明:cv2.convertScaleAbs()是OpenCV库中的一个函数,它用于将输入数组元素的值按比例缩放,并加上一个可选的常数,然后将其转换为绝对值并返回结果。这个函数常用于图像处理,特别是在需要调整图像的亮度和对比度时。参数:●src:输入数组,通常是图像,数据类型为CV_8U或CV_16U或CV_32F。●alpha:可选的比例因子,用于缩放输入数组元素的值。如果该值为正,则图像的对比度会增加;如果该值小于1,则图像的对比度会降低。默认值为1,表示不改变对比度。●beta:可选的常数,用于在每个元素上加上这个值。正值会使图像变亮,负值会使图像变暗。默认值为0,表示不改变亮度。●dst:输出数组,其大小和类型与src相同。●dtype:当这个参数被指定时,输出数组将由这个类型决定;否则,输出数组将与输入数组具有相同的数据类型。使用代码:importcv2#加载图像image=cv2.imread(r'E:\R-C.jfif')#替换为你的图像路径image=cv2.resize(image,(0,0),fx=0.5,fy=0.5)#检查图像是否成功加载ifimageisNone:raiseValueError("Couldnotreadtheimage.")#定义缩放因子和偏移量alpha1=1.2#缩放因子,可以大于1或小于1beta1=0#偏移量,增加或减少亮度alpha2=1.0#缩放因子,可以大于1或小于1beta2=50#偏移量,增加或减少亮度#应用cv2.convertScaleAbs()进行缩放和偏移#如果图像是彩色的,它会保持原有的色彩通道scaled_image=cv2.convertScaleAbs(image,alpha=alpha1,beta=beta1)scaled_image2=cv2.convertScaleAbs(image,alpha=alpha2,beta=beta2)#显示原始图像和调整后的图像cv2.imshow('image',image)cv2.imshow('scaled_image1',scaled_image)cv2.imshow('scaled_image2',scaled_image2)#等待按键后关闭所有窗口cv2.waitKey(0)cv2.destroyAllWindows()12345678910111213141516171819202122232425效果:增强光照:原图:三,对比度增强:三,图像饱和度修改图像饱和度是指图像中颜色的纯度或强度。它是颜色三属性之一,与色相(Hue)和亮度(Lightness)或明度(Value)一起,构成了描述颜色的三个基本维度,饱和度是影响图像视觉冲击力和美观度的重要因素之一,通过调整饱和度,可以显著改变图像的情感和风格。实现代码:importcv2importsysimportnumpyasnpimportmatplotlib.pyplotaspltdefSaturation(rgb_img,increment):#将输入图像转换为浮点数,并归一化到0-1范围img=rgb_img.astype(np.float64)/255.0#计算每个像素的最小值,即HSL颜色空间中的亮度最低的部分img_min=img.min(axis=2)#计算每个像素的最大值,即HSL颜色空间中的亮度最高的部分img_max=img.max(axis=2)#计算饱和度(delta)和亮度(value)的中间值delta=(img_max-img_min)value=(img_max+img_min)#计算HSL颜色空间中的亮度LL=value/2.0#根据亮度L计算饱和度s的两个可能值s1=delta/(value+1e-8)#防止除以0的情况,添加一个很小的数s2=delta/(2-value+1e-8)#根据亮度L选择饱和度s的正确值s=np.where(L1,s,1-increment)#计算调整后的alpha值alpha=1/alpha-1#对RGB图像的每个通道进行调整,以改变饱和度foriinrange(3):img[:,:,i]+=(img[:,:,i]-L)*alpha#确保调整后的RGB值在0到1之间,如果超出这个范围,则将其限制在这个范围内img=np.clip(img,0,1)#返回调整后的图像returnimgpath=r'E:\R-C.jfif'increment=0.5#范围-1到1#run:pythonSaturation.py(path)(increment)if__name__=="__main__":img=cv2.imread(path)img=cv2.resize(img,(640,640))img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)img_new=Saturation(img_rgb,increment)img_new=cv2.cvtColor((img_new*255).astype(np.uint8),cv2.COLOR_RGB2BGR)cv2.imshow("img",img)cv2.imshow("img_new",img_new)cv2.waitKey(0)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354效果:左侧原图,右侧饱和度增强后的图片
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-28 21:09 , Processed in 0.502406 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表