使用opencv怎么调整图像亮度和对比度?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>图像处理强>
图像变换就是找到一个函数,把原始图像矩阵经过函数处理后,转换为目标图像矩阵。
可以分为两种方式,即像素级别的变换和区域级别的变换
- <李>
点操作符(像素变换)
李> <李>社区(成立)操作符
李>像素级别的变换就相当于<代码> \ (p_后{}(i, j)=f (p_之前{}(i, j)) \), 代码>即变换后的每个像素值都与变换前的同位置的像素值有个函数映射关系。
<>强对比度和亮度改变强>
<强>线性变换强>
最常用的是线性变换。即\α(g (i, j)=\ \ cdot f (i, j) +β\ \)
f (i, j)是原像素值,g (i, j)是变换后的像素值。
\α(\ \)调整对比度,\β(\ \)调整亮度。有时也称之为获得和偏见参数。
对比度是什么?不就是“亮和暗的区别“吗?也就是像素值的大小的区别。那我乘以一个α系数,当α很大的时候就是放大了这种亮度值的差异,也就是提高了对比度,当α很小时,也就是缩小了亮度的差异,也就是缩小了对比度。
β就更好理解了,直接在像素的亮度值上加上一个数,正数就是提高亮度,负数降低亮度。
看一下下面代码的示例:
得到__future__ import print_function 得到builtins import 输入 import cv2  as 简历 import numpy  as np import argparse #,Read image  given by 用户 parser =, argparse.ArgumentParser(描述=& # 39;Code for Changing 从而contrast 以及brightness of an 形象!,教程# 39;公司) parser.add_argument(& # 39;——输入# 39;,,帮助=& # 39;Path 用input 图像强生# 39;,,默认=& # 39;lena.jpg& # 39;) 时间=args parser.parse_args () 时间=image cv.imread (cv.samples.findFile (args.input)) if image  is 没有: 打印才能(& # 39;Could not open 或是find 从而形象:,& # 39;,,args.input) 退出才能(0) 时间=new_image np.zeros (image.shape, image.dtype) alpha 1.0=,, # Simple contrast 控制 beta =, 0,, # Simple brightness 控制 #,Initialize 价值 打印(& # 39;,Basic Linear Transforms & # 39;) 打印(& # 39;- - - - - - - - - - - - - - - - - - - - - - - - - # 39;) 试一试: alpha 才能=,浮子(输入(& # 39;*,Enter 从而alpha value [1.0 - -3.0]:, & # 39;)) beta 才能=,int(输入(& # 39;*,Enter 从而beta value (0 - 100):, & # 39;)) except ValueError: 打印才能(& # 39;错误,,not a 数字# 39;) #,Do 从而,operation new_image (i, j),=,α*图像(i, j), +β #,Instead of  these & # 39;为# 39;,loops could have used 简单:我方表示歉意=#,new_image cv.convertScaleAbs(图像,,α=α,β=β) #,but wanted 用show 你我方表示歉意请;用access 从而pixels :) for y 拷贝范围(image.shape [0]): for 才能;x 拷贝范围(image.shape [1]): ,,,for c 拷贝范围(image.shape [2]): ,,,,,new_image [y、x、c],=, np.clip(α*图像(y、x、c), +,β,0,255) cv.imshow (& # 39; Original 图像# 39;,,图片) cv.imshow (& # 39; New 图像# 39;,,new_image) #,Wait until  user press some 关键 cv.waitKey ()
提示模块& # 39;cv2& # 39;没有属性& # 39;样品# 39;的话要先安装pip安装opencv-python==4.0.0.21。
执行:python change_brightness_contrast。py——输入。/lights.jpeg
线性变换有个问题,如上图,α=1.3,β=40,提高原图亮度的同时,导致云几乎看不见了。如果要看见云的话,建筑的亮度又不够。
这个时候就引入了非线性变换。称之为伽马校正
\ (O=\左(\压裂{我}{255}\右)^{\伽马}\乘以255 \)
与线性变换不同,对不同的原始亮度值,其改变强度是不同的,是非线性的。