// opencv2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
//-----------------------------------【头文件包含部分】---------------------------------------
// 描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#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 m_Value; //对比度值
int g_Value; //亮度值
Mat src_Image, dst_Image;
int main()
{
//改变控制台前景色和背景色
system("color5F");
//读入用户提供的图像
src_Image = imread("test.jpg");
if (!src_Image.data) { printf("读取图片错误~!\n"); return false; }
//将src_Image的大小和格式赋值给dst_Image
dst_Image = Mat::zeros(src_Image.size(), src_Image.type());
//设定对比度和亮度的初值
m_Value = 80;
g_Value = 80;
//创建窗口
namedWindow("效果图窗口", 1);
//创建轨迹条
createTrackbar("对比度:", "效果图窗口", &m_Value, 300, ContrastAndBright);
createTrackbar("亮 度:", "效果图窗口", &g_Value, 200, ContrastAndBright);
//调用回调函数
ContrastAndBright(m_Value, 0);
ContrastAndBright(g_Value, 0);
//输出一些帮助信息
cout << endl << "\t嗯。好了,请调整滚动条观察图像效果~\n\n"
<< "\t按下“q”键时,程序退出~!\n"
<< "\n\n\t\t\t\tby浅墨";
//按下“q”键时,程序退出
while (char(waitKey(1)) != 'q') {}
return 0;
}
//-----------------------------【ContrastAndBright( )函数】------------------------------------
// 描述:改变图像对比度和亮度值的回调函数
//-----------------------------------------------------------------------------------------------
static void ContrastAndBright(int, void *)
{
//创建窗口
namedWindow("原始图窗口", 1);
//三个for循环,执行运算 dst_Image(i,j) =a*src_Image(i,j) + b
for (int y = 0; y < src_Image.rows; y++)
{
for (int x = 0; x < src_Image.cols; x++)
{
for (int c = 0; c < 3; c++)
{
dst_Image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>((m_Value*0.01)*(src_Image.at<Vec3b>(y, x)[c]) + g_Value);
}
}
}
//显示图像
imshow("原始图窗口", src_Image);
imshow("效果图窗口", dst_Image);
}