当前位置:   article > 正文

OpenCV__Python图像的对比度亮度调整_教程9_python opencv调整图片亮度

python opencv调整图片亮度

1、图像的对比度亮度调整方法一

通过np.clip函数进行调整

numpy.clip(x, x_min, x_max, out=None)[source]

其中a是一个数组,后面两个参数分别表示最小和最大值,也就是说clip这个函数将将数组中的元素限制在x_min, x_max之间,大于x_max的就使得它等于 x_max,小于x_min,的就使得它等于x_min。

  1. import numpy as np
  2. x=np.array([1,2,3,4,5,6,7,8,9])
  3. dst = np.clip(x,4,8)
  4. print(dst)

可以看到,输出的纬度不变,根据上下限修改了数据。

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

  1. #引入opencv模块
  2. import cv2 as cv
  3. #引入numpy模块
  4. import numpy as np
  5. #引入sys模块
  6. import sys
  7. #对比度范围:0 ~ 0.3
  8. alpha = 0.3
  9. #亮度范围0 ~ 100
  10. beta = 100
  11. img = cv.imread('E:/chenopencvblogimg/test1.jpg')
  12. img2 = cv.imread('E:/chenopencvblogimg/test1.jpg')
  13. def updateAlpha(x):
  14. global alpha, img, img2
  15. alpha = cv.getTrackbarPos('Alpha', 'image')
  16. alpha = alpha * 0.01
  17. img = np.uint8(np.clip((alpha * img2 + beta), 0, 255))
  18. def updateBeta(x):
  19. global beta, img, img2
  20. beta = cv.getTrackbarPos('Beta', 'image')
  21. img = np.uint8(np.clip((alpha * img2 + beta), 0, 255))
  22. def img_test():
  23. global beta, img, img2
  24. #判断是否读取成功
  25. if img is None:
  26. print("Could not read the image,may be path error")
  27. return
  28. # 创建窗口
  29. cv.namedWindow('image',cv.WINDOW_NORMAL)
  30. cv.createTrackbar('Alpha', 'image', 0, 300, updateAlpha)
  31. cv.createTrackbar('Beta', 'image', 0, 255, updateBeta)
  32. cv.setTrackbarPos('Alpha', 'image', 100)
  33. cv.setTrackbarPos('Beta', 'image', 10)
  34. while (True):
  35. cv.imshow('image', img)
  36. if cv.waitKey(1) == ord('q'):
  37. break
  38. cv.destroyAllWindows()
  39. if __name__ == '__main__':
  40. sys.exit(img_test() or 0)

2、亮度对比度调整的方法二

用到了函数addweighted

cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) → dst

参数说明

  • src1 – first input array.
  • alpha – weight of the first array elements.
  • src2 – second input array of the same size and channel number as src1.
  • beta – weight of the second array elements.
  • dst – output array that has the same size and number of channels as the input arrays.
  • gamma – scalar added to each sum.
  • dtype – optional depth of the output array; when both input arrays have the same depth, dtype can be set to -1, which will be equivalent to src1.depth().

此函数可以用一下矩阵表达式来代替:

dst = src1 * alpha + src2 * beta + gamma;

 

  1. #引入opencv模块
  2. import cv2 as cv
  3. #引入numpy模块
  4. import numpy as np
  5. #引入sys模块
  6. import sys
  7. #对比度亮度调整
  8. def img_contrast_bright(img,a,b,g):
  9. h,w,c = img.shape
  10. blank = np.zeros([h,w,c],img.dtype)
  11. dst = cv.addWeighted(img,a,blank,b,g)
  12. return dst
  13. def img_test():
  14. img = cv.imread('E:/chenopencvblogimg/mofan.jpg')
  15. #判断是否读取成功
  16. if img is None:
  17. print("Could not read the image,may be path error")
  18. return
  19. cv.namedWindow("origin Pic",cv.WINDOW_NORMAL)
  20. cv.imshow("origin Pic",img)
  21. #调整亮度对比度
  22. #img = img_contrast_bright(img,0.3,0.7,0)
  23. a = 1.2
  24. b = 1-a
  25. g = 10
  26. img = img_contrast_bright(img,a,b,g)
  27. cv.namedWindow("img_adjusted",cv.WINDOW_NORMAL)
  28. cv.imshow("img_adjusted",img)
  29. #让显示等待键盘输入维持在那里,否则程序跑完就闪退啦!
  30. cv.waitKey(0)
  31. #销毁窗口
  32. cv.destroyAllWindows()
  33. if __name__ == '__main__':
  34. sys.exit(img_test() or 0)

 

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

闽ICP备14008679号