【Emgu.CV教程】第21篇 、色彩处理之ConvertTo()函数改变图像的亮度和对比度

2024-01-03 09:14:12

? ? ? ? 先画重点:

  1. 亮度是指图像的整体明亮程度。增加亮度会使图像整体变得更加明亮,而减少亮度则会使图像变暗。
  2. 对比度是指图像中不同区域之间亮度差异的程度。它衡量了图像中最亮和最暗区域之间的差异。对比度高的图像明暗差异大,而对比度低就是明暗差异不明显。对比度可以通过调整图像中像素的亮度值来改变。增加亮度差异会增加对比度,而减少亮度差异则会降低对比度。

? ? ? ? 注意啊,亮度是亮度、对比度是对比度。图像整理亮度大,不代表对比度大;对比度大的图像,也有可能整体看上去有些暗。基本上网上的教程都没有举例子说明,我就不一样了,先看一副名画:

? ? ? ? 不同亮度、对比度的四种效果如下:?

? ? ? ? 这四张图一对比,是不是马上秒杀其它作者的讲解。亮度好理解,像素值越接近255,就是越亮。一张纯白的图片,是最亮的,但是对比度是最低的,因为整副图片没有明暗差别。?对比度就是亮的区域和暗的区域差别有多大。您看上面那个低亮度、高对比度的图片。虽然整体都很黑,但是原图亮的部分,也就是桌子上的地球仪那块,是不是比其它区域还是要亮一些。低亮度低对比度那张图,就是整体上都很亮,但是最亮的部分比最暗的部分没差多少。

? ? ? ? 上面四种效果是我用PhotoShop调出来的,Emgu.CV中也有对应的函数,就是ConvertTo()函数,之前在第十一篇文章里面介绍过,是这样说的:

? ? ? ? 这个函数除了可以改变图像深度类型以外,还可以改变图像的亮度和对比度。它是利用了这个公式:

? ? ? ? g(x)=α.f(x)+β

? ? ? ? 这就是一种线性转换关系。f(x) 是源图像像素值;g(x) 是目标图像像素值;参数α代表增益,控制对比度;β代表偏置参数,控制亮度。分别取不同的值,得出效果如下图:

? ? ? ? 代码很简单,用法如下:

Mat dstMat = new Mat(); // 目标图像
Mat tempMat = srcMat.Clone(); // 原图深拷贝
tempMat.ConvertTo(dstMat, tempMat.Depth, a, b);

? ? ? ? ConvertTo()函数改变图像亮度和对比度时,如果α = 1, β = 0,这时候输出的结果和原图是相同的。读者们,还是要多多练习才能体会出亮度、对比度的差异,这篇文章就讲到这里。

原创不易,请勿抄袭。共同进步,相互学习。?

文章来源:https://blog.csdn.net/sswss12345/article/details/135286074
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。