【图像处理OpenCV(C++版)】——4.2 对比度增强之线性变换
创始人
2024-05-11 23:02:55
0

前言

😊😊😊欢迎来到本博客😊😊😊

🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。

😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–>搜索你要查询的算子名称或相关知识点,或者通过这篇博客👉通俗易懂OpenCV(C++版)详细教程——OpenCV函数快速查找(不断更新中)]查阅你想知道的知识,即可食用。

🎁🎁🎁支持:如果觉得博主的文章还不错或者您用得到的话,可以悄悄关注一下博主哈,如果三连收藏支持就更好啦!这就是给予我最大的支持!😙😙😙


文章目录

    • 学习目标
    • 一、概念及原理
    • 二、代码实现
      • 2.1、方式一
      • 2.2、方式二
      • 2.3、方式三
    • 三、 总结

学习目标

  • 熟悉线性变换概念及原理
  • C++实现线性变换案例

一、概念及原理

  图像的线性变换可以用以下公式定义:

其中,输入图像为I,宽为W、高为H,输出图像记为O

  如下图所示,当a=1b=0时,OI 的一个副本;如果a>1,那么输出图像O对比度I有所增大;如果0,那么O的对比度比I有所减小。而b值的改变,影响的是输出图像的亮度,当b>0时,亮度增加;当b<0时,亮度减小

  举例:假设图像的灰度级范围是[50,100],通过a=2,b=0的线性变换,可以将输出图像的灰度级拉伸到[100,200],灰度级范围有所增加,从而提高了对比度;而如果令a=0.5,b=0,则输出图像的灰度级会压缩到[25,50],灰度级范围有所减小,则降低了对比度

  
  下面介绍线性变换的代码实现,从处理图像的效果上可以更直观地理解线性变换的作用。

二、代码实现

  在OpenCV中实现一个常数与矩阵相乘有多种方式

2.1、方式一

  线性变换的第一种方式,通过Mat的成员函数:

convertTo(OutputArray m,int rtype,double alpha=1,double beta=0)

  其中参数m代表输出矩阵,参数rtype输出矩阵m的数据类型,参数alphabeta分别可以理解为线性变换中ab简单案例如下:

#include 
#include 
#include 
#includeusing namespace std;
using namespace cv;int main() {Mat I = (Mat_(2,2) << 0, 200, 35, 8);//输入矩阵/原图Mat O;//输出矩阵I.convertTo(O, CV_8UC1, 2.0, 0);cout << "O=:" << O << endl;return 0;
}

  其中输入的I的数据类型为uchar,当输出矩阵的数据类型是CV_8U时,大于255的值会自动截断为255

  我们可以再用一张图形象显示

#include 
#include 
#include 
#includeusing namespace std;
using namespace cv;int main() {Mat image = imread("D:/VSCodeFile/OpenCV_CSDN/image/logo.jpeg", IMREAD_COLOR);Mat Outiamge;image.convertTo(Outiamge, CV_8UC1, 2.0, 5);imshow("image", image);imshow("Outiamge【alpha=1.5,beta=0】", Outiamge);waitKey(0);return 0;
}

  其中,通过a=2,b=5的线性变换,可以将输出图像的灰度级进行拉伸,从而提高了对比度;b=5>0,亮度也有所增加。

  

2.2、方式二

  线性变换的第二种方式,使用乘法运算符‘ * ’,即:

Mat O=4.0*I;
#include 
#include 
#include 
#includeusing namespace std;
using namespace cv;int main() {Mat I = (Mat_(2,2) << 0, 200, 35, 8);//输入矩阵/原图Mat O = 4.0 * I;cout << "O=:" << O << endl;return 0;
}

  输出矩阵O的值为[[0,255],[140,32]],使用乘法运算符‘ * ’无论常数是什么数据类型输出矩阵的数据类型总是和输入矩阵的数据类型相同,当数据类型是CV_8U时,在返回值中将大于255的值自动截断为255。

  同样,用一张图形象显示

#include 
#include 
#include 
#includeusing namespace std;
using namespace cv;int main() {Mat image = imread("D:/VSCodeFile/OpenCV_CSDN/image/logo.jpeg", IMREAD_COLOR);Mat Outiamge=2.0*image+5;imshow("image", image);imshow("Outiamge【alpha=1.5,beta=0】", Outiamge);waitKey(0);return 0;
}

  

2.3、方式三

  线性变换的第三种方式,利用OpenCV提供的函数:

convertScaleAbs(InputArray src,OutputArray dst,double alpha=1,double beta=0))

  其中,dst=alpha*src+betadst数据类型和输入矩阵src的数据类型是相同的

#include 
#include 
#include 
#includeusing namespace std;
using namespace cv;int main() {Mat I = (Mat_(2,2) << 0, 200, 35, 8);//输入矩阵/原图Mat O;convertScaleAbs(I,O, 2.0 ,0);cout << "O=:" << O << endl;return 0;
}

  同样,用一张图形象显示

#include 
#include 
#include 
#includeusing namespace std;
using namespace cv;int main() {Mat image = imread("D:/VSCodeFile/OpenCV_CSDN/image/logo.jpeg", IMREAD_COLOR);Mat Outiamge;//Mat Outiamge=2.0*image+5;convertScaleAbs(image, Outiamge, 2.0, 5);imshow("image", image);imshow("Outiamge【alpha=1.5,beta=0】", Outiamge);waitKey(0);return 0;
}

  以上线性变换是对整个灰度级范围使用了相同的参数有的时候也需要针对不同的灰度级范围进行不同的线性变换,这就是常用的分段线性变换

  分段线性变换应用场景:经常用于降低较亮或较暗区域的对比度来增强灰度级处于中间范围的对比度,或者压低中间灰度级处的对比度来增强较亮或较暗区域的对比度。

  
  线性变换的参数需要根据不同的应用及图像自身的信息进行合理的选择,可能需要进行多次测试,所以选择合适的参数是相当麻烦的。其实OpenCV有一种基于当前图像情况自动选取ab的值的方法,下一节就介绍一种显而易见但却很有效的方法,称为直方图正规化


三、 总结

  最后,长话短说,大家看完就好好动手实践一下,切记不能三分钟热度、三天打鱼,两天晒网。OpenCV是学习图像处理理论知识比较好的一个途径,大家也可以自己尝试写写博客,来记录大家平时学习的进度,可以和网上众多学者一起交流、探讨,有什么问题希望大家可以积极评论交流,我也会及时更新,来督促自己学习进度。希望大家觉得不错的可以点赞、关注、收藏。


🚶🚶🚶今天的文章就到这里啦~
喜欢的话,点赞👍、收藏⭐️、关注💟哦 ~

相关内容

热门资讯

张国荣经典台词 关于张国荣经典台词  1、哭,我为了感动谁,笑,又为了碰着谁。  ——《路过蜻蜓》  2、虽然我很喜...
新郎婚礼简短致辞 新郎婚礼简短致辞(精选10篇)  在平平淡淡的学习、工作、生活中,大家都经常接触到致辞吧,致辞是指在...
美剧经典台词截图 美剧经典台词截图  在社会发展不断提速的今天,用到台词的地方越来越多,台词是一种特殊的文学语言,必须...
女朋友撒娇的经典台词 女朋友撒娇的经典台词  1、这种被朋友的情况让我很失落,因为我喜欢他。  2、“她就是躲着我我该怎么...
会主持词开场白 会主持词开场白  篇一  尊敬的各位领导、各位来宾  各位公司同仁:  大家下午好!  非常高兴和大...
中国人寿保险公司晨会主持词 中国人寿保险公司晨会主持词  主持词由主持人于节目进行过程中串联节目的串联词。以下是小编整理的中国人...
公司中秋晚会主持词 关于公司中秋晚会主持词  主持词分为会议主持词、晚会主持词、活动主持词、婚庆主持词等。在当今不断发展...
小学生职位竞选词 小学生职位竞选词  个人觉得竞选中队长,你已经很清楚中队长需要做的事情了,那么就从每一个任务来发展一...
在结婚典礼上的精彩幽默主持词 在结婚典礼上的精彩幽默主持词各位来宾:大家好!奉新郎新娘之命,我来主持今天的婚礼。为什么新郎新娘一定...
婚礼主持人搞笑台词 婚礼主持人搞笑台词  各位来宾:  大家好!奉新郎新娘之命,我来主持今天的婚礼,婚礼主持人搞笑台词。...
幼儿园运动会主持稿 幼儿园运动会主持稿  篇一:幼儿园运动会主持词  踏着春天的脚步,踩着春风的节拍,春天已经来到我们中...
小学庆元旦活动主持词 小学庆元旦活动主持词  利用在中国拥有几千年文化的诗词能够有效提高主持词的感染力。在当今社会生活中,...
爵士舞蹈串词主持词   爵士舞即美国现代舞,是一种急促又富动感的节奏型舞蹈,是属于一种外放性的舞蹈,不像古典芭蕾舞或现代...
幼儿园元旦节目主持词   齐x:亲爱的爸爸妈妈  周x:亲爱的爷爷奶奶  王x:亲爱的老师  李x:亲爱的小朋友们  合:...
运动会运动员赞美词 运动会运动员赞美词1.赞运动员是我们的目标,是我们的信念,在清凉的初秋,在喧嚣的田径场上,。你们点燃...
黄梅戏晚会的主持词 黄梅戏晚会的主持词  戏迷欢庆四一八 黄梅又添新奇葩  ——喜迎418暨欢庆黄梅戏艺术团成立的晚会台...
学校秋季运动会开幕主持词 学校秋季运动会开幕主持词(精选6篇)  主持词要注意活动对象,针对活动对象写相应的主持词。在当今社会...
庆祝五四文艺晚会主持稿 庆祝五四文艺晚会主持稿  男:尊敬的各位领导、来宾  女:电视机前的观众朋友们  合:大家好  男:...
最新品鉴会主持词 最新品鉴会主持词  鉴会现在开始!  女:各位领导,各位嘉宾  男:女士们、先生们  合:大家下午好...