【Python3-OpenCV】调节图片亮度与对比度

1,571 阅读2分钟

这是我参与更文挑战的第24天,活动详情查看: 更文挑战

OpenCV是一个C++库,目前流行的计算机视觉编程库,用于实时处理计算机视觉方面的问题,它涵盖了很多计算机视觉领域的模块。在Python中常使用OpenCV库实现图像处理。

image.png

本文将介绍如何在Python3中使用OpenCV实现调节图片亮度与对比度。

前文

亮度调整是将图像像素的强度整体变大或变小。

对比度调整指的是图像暗处变得更暗,亮处变得更亮,从而拓宽某个区域内的显示精度。

本文中是创建两个滑动条分别调整对比度和亮度(对比度范围:0 ~ 0.3, 亮度0 ~ 100)。

提示:因为滑动条没有小数,所以可以设置为0 ~ 300,然后乘以0.01

实现公式

图片对比度和亮度的调整一般通过下面公式计算:

image.png

  • f(x,y) 代表源图像 x行,y列的像素点的c通道的数值

  • g(x,y) 代表目标图像x行,y列的像素点的c通道的数值

  • a参数(a>0)表示放大的倍数(一般在0.0~3.0之间)

  • b参数一般称为偏置,用来调节亮度

实现代码

import cv2
import numpy as np
alpha = 0.3
beta = 80
img_path = "E:\\demo\\lena.jpg"
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)
while (True):
    cv2.imshow('image', img)
    if cv2.waitKey(1) == ord('q'):
        break
cv2.destroyAllWindows()

输出为:

image.png

本月将陆续推出相关系列文章,

篇篇精彩,尽请关注。