Python-OpenCV——亮度和对比度

亮度计算:Y(亮度) = 0.299*R + 0.587*G + 0.114*B

也可以根据这个计算亮度:

https://blog.csdn.net/cruoni/article/details/85110289

 

对比度是乘法,加大差距

亮度是加法,普调

亮度与对比度

亮度调整是将图像像素的强度整体变大/变小,对比度调整指的是图像暗处变得更暗,亮出变得更亮,从而拓宽某个区域内的显示精度。

OpenCV中亮度和对比度应用这个公式来计算:g(x) = αf(x) + β,其中:α(>0)、β常称为增益与偏置值,分别控制图片的对比度和亮度。

注:此处对α/β控制对比度和亮度有争议,具体请参考:OpenCV关于对比度和亮度的误解

img = cv2.imread('lena.jpg')
# 此处需注意,请参考后面的解释
res = np.uint8(np.clip((1.5 * img + 10), 0, 255))
tmp = np.hstack((img, res))  # 两张图片横向合并(便于对比显示)

cv2.imshow('image', tmp)
cv2.waitKey(0)

还记得图像混合那一节中numpy对数据溢出的取模处理吗?250+10 = 260 => 260%256=4,它并不适用于我们的图像处理,所以用np.clip()函数将数据限定:a<0 => a=0, a>255 => a=255

 

做个小练习吧!创建两个滑动条分别调整对比度和亮度(对比度范围:0~0.3, 亮度0~100)。提示:因为滑动条没有小数,所以可以设置为0~300,然后乘以0.01

import cv2
import numpy as np

alpha = 0.3
beta = 80
img_path = "./a.png"
img = cv2.imread(img_path)
img2 = cv2.imread(img_path)

def updateAlpha(x):
    global alpha,img,img2
    alpha = cv2.getTrackbarPos('Alpha','image')
    alpha = alpha * 0.01
    img = np.uint8(np.clip((alpha * img2 + beta), 0, 255))

def updateBeta(x):
    global beta,img,img2
    beta = cv2.getTrackbarPos('Beta','image')
    img = np.uint8(np.clip((alpha * img2 + beta), 0, 255))
  

# 创建窗口
cv2.namedWindow('image')
cv2.createTrackbar('Alpha','image',0,300,updateAlpha)
cv2.createTrackbar('Beta','image',0,255,updateBeta)
cv2.setTrackbarPos('Alpha','image',100)
cv2.setTrackbarPos('Beta','image',10)
# 设置鼠标事件回调
#cv2.setMouseCallback('image',update)  


while(True):
    cv2.imshow('image',img) 
    if cv2.waitKey(1) == ord('q'):  
        break

cv2.destroyAllWindows()

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值