您的位置:首页 > 运维架构

opencv3.0学习笔记【10/14】contrast、brught调节

2016-10-13 21:46 435 查看
公式g(x)=a*f(x)+b,a为对比度,b为亮度
/////////code///////////////////////////////////////////////////////////////////
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

static void on_ContrastAndBright(int, void*);//轨迹条的回调函数,参数必须是(int,void*),第一个是滑动条的位置,第二个是额外参数,creatTrackbar的参数六
Mat src, dst;
int bright ;
int contrast ;

int main()
{

src = imread("C:\\Users\\许蔓延\\Documents\\Visual Studio 2015\\Projects\\Project1\\lena.jpg");
if (!src.data) { printf("读取原图失败"); return false; }
dst = Mat::zeros(src.size(), src.type());
int bright = 80;
int contrast = 80;
namedWindow("亮度和对比度",1);
createTrackbar("亮度条", "亮度和对比度", &bright, 1000, on_ContrastAndBright, NULL);
createTrackbar("对比度条", "亮度和对比度", &contrast, 1000, on_ContrastAndBright, NULL);
//createTracker函数参数解释
//	    参数一  滑动条名
//		参数二  滑动条所在窗口名
//		参数三  滑动块的位置会自动赋给这个指针指向的变量
//		参数四  滑动条最大值
//		参数五  回调函数
//		参数六  调用回调函数时的额外数据

on_ContrastAndBright(bright, 0);
on_ContrastAndBright(contrast, 0);
while (char(waitKey(1)) != 'q') { }
return 0;
}
static void on_ContrastAndBright(int, void *)
{
namedWindow("原图", 1);
for (int i = 0; i < src.rows; i++)
{
for (int j = 0; j < src.cols; j++)
{
for (int c = 0; c < 3; c++)
{
dst.at<Vec3b>(i, j)[c] = saturate_cast<uchar>(src.at<Vec3b>(i, j)[c] * contrast*0.01 + bright );//乘0.01,范围300,则对比度在1到3倍变化,staturate_cast模板函数防止溢出
}
}
}
imshow("原图", src);
imshow("亮度和对比度",dst);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: