- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实践3:图像对比度和亮度调整
实践3 :图像对比度和亮度调整
1.图像对比度和亮度基础
首先我们给出算子的概念。一般的图像处理算子都是一个函数,它接受一个或多个输入
图像,并产生输出图像。下式 (1)给出了算子的一般形式:
( )
= ℎ(()) 或者
( ) ( ) ( ) ( )
= ℎ� , , ⋯, � (1)
0 1
图像亮度和对比度的调整操作,其实属于图像处理变换中比较简单的一种:点操作(point
operators) 。点操作有一个特点,仅仅根据输入像素值(有时可加上某些全局信息或参数),
来计算相应的输出像素值。这类算子包括亮度(brightness )和对比度 (contrast )调整,以
及颜色校正(colorcorrection )和变换(transformations )。
图像亮度和对比度是常用的点操作(或者说点算子),很显然,是在式(1)上乘上一
个常数(对应对比度的调节)以及加上一个常数(对应亮度值的调节),如式(2 )所示:
( ) ( )
= × + (2)
其中:
参数f(x) 表示源图像像素。
参数g(x) 表示输出图像像素。
参数a (需要满足a0 )被称为增益(gain ),常常被用来控制图像的对比度。
参数b 通常被称为偏置(bias ),常常被用来控制图像的亮度。
由式(2 ),可改写为式(3 ),如下:
( ) ( )
, = × , + (3)
其中,i 和j 表示像素位于第i 行和第j 列。那么,式(3)就可以用来在OpenCV 中控制图像
的亮度和对比度的理论公式。
2.图像像素
访问图像中的像素有很多种方法,在此我们先了解下面的这一种方法。
为了执行式(3 ),需要访问图像的每一个像素。因为是对RGB 图像进行运算,图像
的每个像素有三个值R 、G、B ,所以必须分别访问它们。以下是访问像素的代码片段,三
个for 循环解决该问题:
//三个for 循环,执行运算 new_image(i,j) =a*image(i,j) + b
for(int y = 0; y image.rows; y++ )
{
for(int x = 0; x image.cols; x++ )
{
for(int c = 0; c 3; c++ )
{
new_image.atVec3b(y,x)[c]=
saturate_castuchar( (g_nContrastValue*0.01)*(image.atVec3b(y,x)[c] ) + g_nBrightValue );
}
}
}
其中:
为了访问图像的每一个像素,使用这样的语法:image.atVec3b(y,x)[c] 。其中,y 是
像素所在的行,x 是像素所在的列,c 是R 、G、B (对应0、1、2 )其中之一。
因为运算结果可能超出像素取值范围(溢出),还可能是非整数(如果是浮点数的话),
所以要用saturate_cast 对结果进行转换,以确保它为有效值。
这里的a 也就是对比度,一般为了观察的效果,取值为0.0
文档评论(0)