改变图像的对比度和亮度
目标
在文中将学习如何:
● 访问像素值
● 获取一些关于像素转换的很酷的信息
理论
请注意
下面的解释来自 Richard Szeliski 的《计算机视觉:算法和应用》一书
图像处理
● 通用图像处理运算符是获取一个或多个输入图像并生成输出图像的函数。
● 图像变换可以看作是:
○ 点操作符(像素变换)
○ 邻域(基于区域的)操作符
像素变换
● 在这种图像处理变换中,每个输出像素的值仅取决于相应的输入像素值(可能加上一些全局收集的信息或参数)。
● 此类操作符的示例包括亮度和对比度调整以及颜色校正和变换。
亮度和对比度调整
● 两种常用的点处理是带常数的乘法和加法:
g(x)=αf(x)+β
● 参数 α>0 和 β 通常称为增益和偏置参数;有时这些参数被称为分别控制对比度和亮度。
● 可以将 f(x) 视为源图像像素,将 g(x) 视为输出图像像素。然后,我们可以更方便地将表达式写成:
g(i,j)=αf(i,j)+β
其中 i 和 j 指示像素位于第 i 行和第 j 列。
代码
下面的代码执行 g(i,j)=αf(i,j)+β 操作:
from __future__ import print_functionfrom builtins import inputimport cv2 as cvimport numpy as npimport argparse# 读取用户给定的图片parser = argparse.ArgumentParser(description='Code for Changing the contrast and brightness of an image! tutorial.')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('无法打开或找到图片: ', args.input)exit(0)new_image = np.zeros(image.shape, image.dtype)alpha = 1.0 # 简单的对比度控制beta = 0 # 简单的亮度控制# Initialize valuesprint(' 基本的线性变换 ')print('-------------------------')try:alpha = float(input('* 输入 alpha 值 [1.0-3.0]: '))beta = int(input('* 输入 beta 值 [0-100]: '))except ValueError:print('错误, 不是数字')for y in range(image.shape[0]):for x in range(image.shape[1]):for c in range(image.shape[2]):new_image[y,x,c] = np.clip(alpha*image[y,x,c] + beta, 0, 255)cv.imshow('original image', image)cv.imshow('new image', new_image)cv.waitKey()
官方文档:
https://docs.opencv.org/4.5.5/d3/dc1/tutorial_basic_linear_transform.html
文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




