当前位置:   article > 正文

Python-OpenCV——亮度和对比度_python opencv 对比度异常

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关于对比度和亮度的误解

  1. img = cv2.imread('lena.jpg')
  2. # 此处需注意,请参考后面的解释
  3. res = np.uint8(np.clip((1.5 * img + 10), 0, 255))
  4. tmp = np.hstack((img, res)) # 两张图片横向合并(便于对比显示)
  5. cv2.imshow('image', tmp)
  6. 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

  1. import cv2
  2. import numpy as np
  3. alpha = 0.3
  4. beta = 80
  5. img_path = "./a.png"
  6. img = cv2.imread(img_path)
  7. img2 = cv2.imread(img_path)
  8. def updateAlpha(x):
  9. global alpha,img,img2
  10. alpha = cv2.getTrackbarPos('Alpha','image')
  11. alpha = alpha * 0.01
  12. img = np.uint8(np.clip((alpha * img2 + beta), 0, 255))
  13. def updateBeta(x):
  14. global beta,img,img2
  15. beta = cv2.getTrackbarPos('Beta','image')
  16. img = np.uint8(np.clip((alpha * img2 + beta), 0, 255))
  17. # 创建窗口
  18. cv2.namedWindow('image')
  19. cv2.createTrackbar('Alpha','image',0,300,updateAlpha)
  20. cv2.createTrackbar('Beta','image',0,255,updateBeta)
  21. cv2.setTrackbarPos('Alpha','image',100)
  22. cv2.setTrackbarPos('Beta','image',10)
  23. # 设置鼠标事件回调
  24. #cv2.setMouseCallback('image',update)
  25. while(True):
  26. cv2.imshow('image',img)
  27. if cv2.waitKey(1) == ord('q'):
  28. break
  29. cv2.destroyAllWindows()

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/103638
推荐阅读
相关标签
  

闽ICP备14008679号