建议首先回顾createTrackbar()函数相关知识
《OpenCV3编程入门》第3章-学习笔记2-滑动条-createTrackbar()
同时准备saturate_cast知识
【OpenCV】中saturate_cast的含义和用法是什么?
//-----------------------------------【程序说明】----------------------------------------------
// 程序名称:创建Trackbar&图像对比度、亮度值调整
//------------------------------------------------------------------------------------------------//-----------------------------------【头文件包含部分】---------------------------------------
// 描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#include
#include
#include"opencv2/imgproc/imgproc.hpp"
#include //-----------------------------------【命名空间声明部分】---------------------------------------
// 描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
using namespace std;
using namespace cv;//-----------------------------------【全局函数声明部分】--------------------------------------
// 描述:全局函数声明
//-----------------------------------------------------------------------------------------------
static void ContrastAndBright(int, void *);//-----------------------------------【全局变量声明部分】--------------------------------------
// 描述:全局变量声明
//-----------------------------------------------------------------------------------------------
int g_nContrastValue; //对比度值
int g_nBrightValue; //亮度值
Mat g_srcImage, g_dstImage;
//-----------------------------------【main( )函数】--------------------------------------------
// 描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main()
{//改变控制台前景色和背景色system("color 5F");//读入用户提供的图像g_srcImage &#61; imread("pic.jpg");if (!g_srcImage.data) { printf("检查&#xff0c;读取g_srcImage图片错误~&#xff01;\n"); return false; }g_dstImage &#61; Mat::zeros(g_srcImage.size(), g_srcImage.type());//设定对比度和亮度的初值g_nContrastValue &#61; 80;g_nBrightValue &#61; 80;//创建窗口namedWindow("【效果图窗口】", 1);//创建轨迹条createTrackbar("对比度&#xff1a;", "【效果图窗口】", &g_nContrastValue, 300, ContrastAndBright);createTrackbar("亮 度&#xff1a;", "【效果图窗口】", &g_nBrightValue, 200, ContrastAndBright);//调用回调函数ContrastAndBright(g_nContrastValue, 0);ContrastAndBright(g_nBrightValue, 0);//输出一些帮助信息cout <<"请调整滚动条" <}//-----------------------------【ContrastAndBright( )函数】------------------------------------
// 描述&#xff1a;改变图像对比度和亮度值的回调函数
//-----------------------------------------------------------------------------------------------
static void ContrastAndBright(int, void *)
{//创建窗口namedWindow("【原始图窗口】", 1);//三个for循环&#xff0c;执行运算 g_dstImage(i,j) &#61;a*g_srcImage(i,j) &#43; bfor (int y &#61; 0; y 是用来防止颜色溢出g_dstImage.at(y, x)[c] &#61; saturate_cast((g_nContrastValue*0.01)*(g_srcImage.at(y, x)[c]) &#43; g_nBrightValue);}}}//显示图像imshow("【原始图窗口】", g_srcImage);imshow("【效果图窗口】", g_dstImage);
}
注意&#xff1a; while (char(waitKey(1)) !&#61; &#39;exit&#39;) {} 这句话不能省略&#xff01;
同样&#xff0c;不能把这句话改为 system("pause");
上面为什么没有识别为C&#43;&#43;然后彩色凸显不同变量&#xff0c;就是因为这句话&#xff0c;注释后&#xff0c;就变成彩色了