opencv学习(十)之调节图像亮度和对比度
2016-11-21 21:28
387 查看
在图像处理中,图像像素的值依赖于输入图像的值。可以通过对输入像素值进行数值运算已达到对图像处理的目的。以调节图像对比度和亮度为例,通过结合之前学过的图像像素访问和轨迹条等内容,对图像对比度和亮度进行调节。
以f(i,j)代表原像素值,g(i,j)为输出像素的值,α和β为两个参数,则可以通过以下公式对图像像素值进行数值运算从而达到调节图像亮度和对比度的目的。
其中参数α>0和β常被称为增益和偏置参数,有时这些参数可以调节图像的对比度和亮度。其中i,j分别代表了该像素的行和列。
程序运行结果如下所示:
程序分析:
* 在上述程序中用alpha和beta分别替代上文中提到的α和β两个参数。
* 使用Mat::zeros()方法初始化目标图像矩阵,与原图像大小和类型相同
* 使用at()函数对图像像素值进行遍历
* 图像为三通道图像,故使用结构存储每个通道所对应的像素值
* 在计算像素值时使用saturate_cast来防止计算出来的图像像素值溢出
以f(i,j)代表原像素值,g(i,j)为输出像素的值,α和β为两个参数,则可以通过以下公式对图像像素值进行数值运算从而达到调节图像亮度和对比度的目的。
g(i,j)= αf(i,j)+ β
其中参数α>0和β常被称为增益和偏置参数,有时这些参数可以调节图像的对比度和亮度。其中i,j分别代表了该像素的行和列。
#include <iostream> #include <stdio.h> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> using namespace std; using namespace cv; //定义全局变量 Mat g_SrcImage, g_DstImage; const int g_nAlphaTrackbarMaxValue = 30; //滑动条最大值 const int g_nBetaTrackbarMaxValue = 100; int g_nAlphaTrackValue; //滑动条对比度对应值 int g_nBetaTrackValue; //滑动条亮度对应值 double g_dAlpahValue; //double g_dBetaValue; //声明回调函数 void on_AlphaTrackbar(int, void*); void on_BetaTrackbar(int, void*); int main() { g_SrcImage = imread("lena.jpg"); //判断图像是否加载成功 if(g_SrcImage.empty()) { cout << "图像加载失败!" << endl << endl; return -1; } else cout << "图像加载成功!" << endl << endl; namedWindow("原图像",WINDOW_AUTOSIZE); imshow("原图像",g_SrcImage); g_DstImage = Mat::zeros(g_SrcImage.size(),g_SrcImage.type()); namedWindow("图像调节",WINDOW_AUTOSIZE); //声明轨迹条依附的窗口 g_nAlphaTrackValue = 10; //轨迹条中alpha初始值 g_nBetaTrackValue = 50; //轨迹条中beta初始值 //在创建的窗体中创建轨迹条并命名 char alphaTrackName[50]; char betaTrackName[50]; sprintf(alphaTrackName,"对比度 %d", g_nAlphaTrackbarMaxValue); sprintf(betaTrackName,"亮 度 %d",g_nBetaTrackbarMaxValue); //创建对比度调节和亮度调节的轨迹条 createTrackbar(alphaTrackName,"图像调节",&g_nAlphaTrackValue,g_nAlphaTrackbarMaxValue,on_AlphaTrackbar); createTrackbar(betaTrackName,"图像调节",&g_nBetaTrackValue,g_nBetaTrackbarMaxValue,on_BetaTrackbar); //调用回调函数 on_AlphaTrackbar(g_nAlphaTrackValue, 0); on_BetaTrackbar(g_nBetaTrackValue, 0); waitKey(0); return 0; } void on_AlphaTrackbar(int, void*) { g_dAlpahValue = (double)g_nAlphaTrackValue / 10; for(int y = 0; y < g_DstImage.rows; y++) { for(int x = 0; x < g_DstImage.cols; x++) { for(int c = 0; c < 3; c++) { g_DstImage.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(g_dAlpahValue * (g_SrcImage.at<Vec3b>(y, x)[c])); } } } imshow("图像调节",g_DstImage); } void on_BetaTrackbar(int, void*) { for(int y = 0; y < g_DstImage.rows; y++) { for(int x = 0; x < g_DstImage.cols; x++) { for(int c = 0; c < 3; c++) { g_DstImage.at<Vec3b>(y, x)[c] = saturate_cast<uchar>((g_SrcImage.at<Vec3b>(y, x)[c]) + g_nBetaTrackValue); } } } imshow("图像调节",g_DstImage); }
程序运行结果如下所示:
程序分析:
* 在上述程序中用alpha和beta分别替代上文中提到的α和β两个参数。
* 使用Mat::zeros()方法初始化目标图像矩阵,与原图像大小和类型相同
* 使用at()函数对图像像素值进行遍历
* 图像为三通道图像,故使用结构存储每个通道所对应的像素值
* 在计算像素值时使用saturate_cast来防止计算出来的图像像素值溢出
相关文章推荐
- 图像亮度、对比度调节(伽马校正)
- OpenCV图像亮度、对比度调节
- 学习opencv 一幅图像的对比度和亮度调节
- 通过gamma调节图像的亮度和对比度
- 图像亮度、对比度调节
- 如何通过调节gamma曲线以调节图像的对比度,亮度等参数
- opencv学习(4)——图像亮度、对比度调整
- opengl 图像对比度、亮度、饱和度调节的glsl代码
- OpenCv基础(二):图像的亮度和对比度属性的调节
- OpenCV学习——图像亮度、对比度调节
- 如何通过调节gamma曲线以调节图像的对比度,亮度等参数
- 图像的亮度和对比度调节
- 如何通过调节gamma曲线以调节图像的对比度,亮度等参数
- 调节亮度、对比度及gamma值实现彩色图像的亮度变换
- OpenCV图像亮度、对比度调节
- opencv 彩色图像亮度、对比度调节 直方图均衡化
- opencv学习笔记-图像对比度、亮度调节
- 【OpenCV学习】图像亮度、对比度调节(伽马校正)
- 如何通过调节gamma曲线以调节图像的对比度,亮度等参数
- opencv图像的对比度、亮度调节