创建轨迹条
createTrackbar
int createTrackbar(
const string& trackbarname, //轨迹条的名字
const string& winname, //窗口的名字
int* value, //一个指向整型的指针,表示滑块的位置。并且在创建时,滑块的初始位置就是该变量当前的值。
int count, //表示滑块可以达到的最大位置的值。PS:滑块最小的位置的值始终为0。
TrackbarCallback onChange = 0, /*这是一个指向回调函数的指针。每次滑块位置改变时,这个函数都会进行回调。
*这个函数的原型必须为void XXXX(int,void*);其中第一个参数是轨迹条的位置,第二个参数是用户数据userdata。
*/如果回调是NULL指针,表示没有回调函数的调用,仅第三个参数value有变化。
void* userdata = 0 //用户传给回调函数的数据,用来处理轨迹条事件,默认值0。如果使用的第三个参数value实参是全局变量的话,就不用管这个参数。
);
获取轨迹条位置
getTrackbarPos:获取并返回轨迹条位置
int getTrackbarPos(
conststring& trackbarname, //轨迹条名称
conststring& winname //窗口名称
);
改变图片亮度和对比度
两个参数 alpha > 0 和 beta 一般称作 增益 和 偏置 参数。我们往往用这两个参数来分别控制 对比度 和 亮度 。且一般取\alpha = [0.0, 3.0] , \beta = [0, 100]
#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include"opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;
static void ContrastAndBright(int, void *);
int g_nContrastValue; //对比度值
int g_nBrightValue; //亮度值
Mat g_srcImage,g_dstImage;
int main( )
{
//改变控制台前景色和背景色
system("color5F");
//读入用户提供的图像
g_srcImage= imread( "/Users/zhouyang/Desktop/opencvCode/materialLibrary/lena2.jpg");
g_dstImage= Mat::zeros( g_srcImage.size(), g_srcImage.type() );
//设定对比度和亮度的初值
g_nContrastValue=80;
g_nBrightValue=80;
//创建窗口
namedWindow("new", 1);
//创建轨迹条
createTrackbar("duibidu", "new", &g_nContrastValue, 300, ContrastAndBright);
createTrackbar("liangdu", "new", &g_nBrightValue, 200, ContrastAndBright);
//调用回调函数
ContrastAndBright(g_nContrastValue,0);
ContrastAndBright(g_nBrightValue,0);
waitKey(0);
return 0;
}
// 改变图像对比度和亮度值的回调函数
static void ContrastAndBright(int, void *)
{
//创建窗口
namedWindow("old", 1);
//三个for循环,执行运算 g_dstImage(i,j) =a*g_srcImage(i,j) + b
for(int y = 0; y < g_srcImage.rows; y++ )
{
for(int x = 0; x < g_srcImage.cols; x++ )
{
for(int c = 0; c < 3; c++ )
{
//saturate_cast 防止数据溢出
g_dstImage.at<Vec3b>(y,x)[c]= saturate_cast<uchar>( (g_nContrastValue*0.01)*(g_srcImage.at<Vec3b>(y,x)[c] ) + g_nBrightValue );
}
}
}
//显示图像
imshow("old", g_srcImage);
imshow("new", g_dstImage);
}