OpenCV图像处理:调整亮度与对比度的Python实战
2星 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还提供了其他更复杂的图像变换函数,如直方图均衡化,可以进一步优化图像的对比度。
2019-11-04 上传
2020-06-24 上传
2024-10-08 上传
2023-05-25 上传
2023-07-14 上传
2024-10-24 上传
2024-10-24 上传
2023-08-21 上传
2023-03-31 上传
weixin_38686399
- 粉丝: 9
- 资源: 934
最新资源
- IEEE 14总线系统Simulink模型开发指南与案例研究
- STLinkV2.J16.S4固件更新与应用指南
- Java并发处理的实用示例分析
- Linux下简化部署与日志查看的Shell脚本工具
- Maven增量编译技术详解及应用示例
- MyEclipse 2021.5.24a最新版本发布
- Indore探索前端代码库使用指南与开发环境搭建
- 电子技术基础数字部分PPT课件第六版康华光
- MySQL 8.0.25版本可视化安装包详细介绍
- 易语言实现主流搜索引擎快速集成
- 使用asyncio-sse包装器实现服务器事件推送简易指南
- Java高级开发工程师面试要点总结
- R语言项目ClearningData-Proj1的数据处理
- VFP成本费用计算系统源码及论文全面解析
- Qt5与C++打造书籍管理系统教程
- React 应用入门:开发、测试及生产部署教程