700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 《OpenCV3编程入门》学习笔记5 Core组件进阶(四)图像对比度 亮度值调整

《OpenCV3编程入门》学习笔记5 Core组件进阶(四)图像对比度 亮度值调整

时间:2020-07-21 06:12:25

相关推荐

《OpenCV3编程入门》学习笔记5 Core组件进阶(四)图像对比度 亮度值调整

第5章 Core组件进阶

5.4 图像对比度、亮度值调整

5.4.1 理论依据

1.算子:一般图像处理算子都是一个函数,接受一个或多个输入图像,并产生输出图像

2.算子一般形式:

3.点操作(point operators):仅根据输入像素值计算输出像素值,这类算子包括亮度(brightness)和对比度(contrast)调整、颜色矫正(color correction)、变换(transformations)

4.两种最常用的点操作是乘上一个常数(对应对比度调节)以及加上一个常数(对应亮度值调节)

(1)公式如下:(具体到像素:)

(2)f(x)表示源图像像素,g(x)表示输出图像像素,a控制图像对比度(被称为增益gain),b控制图像亮度(被称为偏置bias)

5.4.2 示例程序

#include<opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<iostream>using namespace cv;using namespace std;//全局函数声明static void on_ContrastAndBright(int, void *);//全局变量声明int g_nContrastValue;//对比度值int g_nBrightValue;//亮度值Mat g_srcImage, g_dstImage;int main(){//[1]输入图像g_srcImage = imread("love.jpg");if (!g_srcImage.data) {printf("读取图片错误,请确定目录下是否有imread函数指定图片存在~!"); return false; }g_dstImage = Mat::zeros(g_srcImage.size(), g_srcImage.type());//[2]设定对比度和亮度初值g_nContrastValue = 80;g_nBrightValue = 80;//[3]创建效果图窗口namedWindow("[效果图窗口]");//[4]创建轨迹条createTrackbar("对比度:", "[效果图窗口]", &g_nContrastValue, 300, on_ContrastAndBright);createTrackbar("亮 度:", "[效果图窗口]", &g_nBrightValue, 200, on_ContrastAndBright);//[5]进行回调函数初始化on_ContrastAndBright(g_nContrastValue, 0);on_ContrastAndBright(g_nBrightValue, 0);//[6]按下"q"键时,程序退出while(char(waitKey(1))!='q'){}return 0;}//改变图像对比度和亮度值的回调函数static void on_ContrastAndBright(int, void *){//创建窗口namedWindow("[原始图窗口]");//三个for循环,执行运算g_dstImage(i,j)=a*g_srcImage(i,j)+bfor (int x = 0; x < g_srcImage.rows; x++){for (int y = 0; y < g_srcImage.cols; y++){for (int c = 0; c < 3; c++){g_dstImage.at<Vec3b>(x, y)[c] = saturate_cast<uchar>((g_nContrastValue*0.01)*(g_srcImage.at<Vec3b>(x, y)[c]) + g_nBrightValue);//saturate_cast模板函数,用于溢出保护,原理:if(data<0) data=0; else if(data>255) data=255;//a的取值为0.0-3.0的浮点值,但轨迹条一般取整数,将对比度值nContrastValue参数设为0到300,式子中乘以0.01}}}//显示图像imshow("[原始图窗口]", g_srcImage);imshow("[效果图窗口]", g_dstImage);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。