【opencv】关于调整对比度与亮度的视觉算法
2021/11/2 14:10:16
本文主要是介绍【opencv】关于调整对比度与亮度的视觉算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
方法1:线性调整对比度与亮度
如公式1所示,表示原先像素点的像素值,c表示的权重值,b表示加权和后的图像的偏移量,表示调整后改像素点的像素值。在该算法中,将对比度与亮度设计为线性关系。
v’ = v*c+b
代码:
def Change_contrast_brightness(img, c, b): h, w, d = img.shape blank = np.zeros([h, w, d], dtype=np.uint8) dst = cv2.addWeighted(img, c, blank, 1 - c, b) return dst img = cv2.imread(path_org) dst1 = Change_contrast_brightness(img, 1.5, 10)
效果:会出现过度曝光,画面失真,噪点多。
(左侧第一张为原图)
方法2:gamma变换
Gamma变换又称为指数变换或幂次变换,是另外一种常用的灰度非线性变换。图像灰度的伽马变换一般表示如公式(5)所示。首先,需要先进行归一化,然后将gamma作为指数求出新的像素值,最后再还原。
Gamma变换如图5所示,当 gamma<1时,如蓝线所示,在低灰度值区域内,动态范围变大,进而图像对比度增强;在高灰度值区域内,动态范围变小,图像对比度降低。
当 gamma >1时,如红线所示,低灰度值区域的动态范围变小,高灰度值区域在动态范围内变大,降低了低灰度值区域图像对比度。提高了高灰度值区域图像对比度。同时,图像整体的灰度值变小。当 gamma=1时,该灰度变换是线性的,此时通过线性方式改变原图像。
代码:
def gamma_trans(img, gamma): gamma_table = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)] gamma_table = np.round(np.array(gamma_table)).astype(np.uint8) return cv2.LUT(img, gamma_table) img = cv2.imread(path_org) img2 = gamma_trans(img,1.5)
效果:
采用Gamma变换的图像质量显然更好,亮度不会过度曝光,噪声少,图像整体协调,能够带来非常令人舒适的画面效果,非常适合于优化图像视觉效果。
将这个变换添加入图像增强,随机调节对比度与亮度,可以有效提升模型性能!
例如:
im = gamma_trans(im, random.uniform(0.5, 2.0))
(左侧第一张为原图)
这篇关于【opencv】关于调整对比度与亮度的视觉算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享