OpenCV图像处理:调整亮度与对比度的Python实战

2星 10 下载量 31 浏览量 更新于2024-09-01 收藏 333KB PDF 举报
"使用OpenCV调整图像亮度和对比度的实例代码" 在图像处理领域,调整图像的亮度和对比度是常见的操作,有助于增强图像的视觉效果或优化后续的分析过程。OpenCV是一个强大的开源计算机视觉库,提供了多种方法来实现这些调整。本文将介绍如何使用OpenCV通过线性变换来改变图像的亮度和对比度,并提供一段易于理解的Python代码示例。 图像变换通常涉及对原始图像进行某种形式的数学操作,以生成新的图像。根据处理方式的不同,可以分为像素级别的变换和区域级别的变换。像素级别的变换是指每个像素的值都单独进行处理,而区域级别的变换则考虑像素邻域的信息。 对比度和亮度的改变是图像处理中的基本操作。对比度反映了图像中不同区域亮度差异的大小,而亮度则是图像整体的明暗程度。在OpenCV中,可以通过线性变换来调整这两个参数。线性变换的公式是: \[ g(i,j) = \alpha \cdot f(i,j) + \beta \] 其中,\( f(i,j) \)是原始图像中像素点(i, j)的值,\( g(i,j) \)是变换后的像素值,\( \alpha \)用于调整对比度,\( \beta \)用于调整亮度。\( \alpha \)值越大,对比度越高;\( \beta \)值增加会提高图像的整体亮度,减少则会降低亮度。 以下是一个使用OpenCV调整图像亮度和对比度的Python代码示例: ```python from __future__ import print_function from builtins import input import cv2 as cv import numpy as np import argparse # 解析命令行参数,获取输入图像路径 parser = argparse.ArgumentParser(description='Code for changing the contrast and brightness of an image!') parser.add_argument('--input', help='Path to input image.', default='lena.jpg') args = parser.parse_args() # 读取用户指定的图像 image = cv.imread(cv.samples.findFile(args.input)) if image is None: print('Could not open or find the image:', args.input) exit(0) # 定义对比度和亮度调整参数 alpha = 1.5 # 对比度调整因子 beta = 50 # 亮度调整因子 # 创建空的输出图像,与原始图像尺寸相同 output = np.zeros(image.shape, dtype=image.dtype) # 应用线性变换 for i in range(image.shape[0]): for j in range(image.shape[1]): for c in range(3): output[i, j, c] = cv.clip(alpha * image[i, j, c] + beta, 0, 255) # 显示原始图像和调整后的图像 cv.imshow('Original Image', image) cv.imshow('Adjusted Image', output) # 等待用户按键,然后关闭窗口 cv.waitKey(0) cv.destroyAllWindows() ``` 这段代码首先读取用户指定的图像文件,然后定义了对比度调整因子\( \alpha \)(这里设为1.5)和亮度调整因子\( \beta \)(这里设为50)。接下来,它创建了一个与原始图像尺寸相同的空输出图像,并通过遍历每个像素,应用线性变换公式来更新输出图像的像素值。最后,使用`cv.imshow`显示原始图像和调整后的图像,并等待用户按键,然后关闭窗口。 这个简单的代码示例展示了如何利用OpenCV对图像进行基本的亮度和对比度调整。实际应用中,可以根据具体需求调整\( \alpha \)和\( \beta \)的值,以达到理想的效果。此外,OpenCV还提供了其他更复杂的图像变换函数,如直方图均衡化,可以进一步优化图像的对比度。