实践3:图像对比度和亮度调整.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档