前言:
开发环境:win10 Visual Studio 2017
开发语言:C++
编译器:Debug X64
Opencv版本:4.1.1
代码实现:
#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 Contrast_Threshold; // 对比度值
int Intensity_Threshold; // 亮度值
Mat Orign_Image, Empty_Matrix_To_Orign_Image;
Mat Target_Size_Image = Mat::zeros(540, 960, CV_8UC3); // 将原图尺寸缩放至540行*960列
int main()
{
// 改变控制台前景色和背景色
system("color 0F");
// 读入用户提供的图像
Orign_Image = imread("D:\\vs2017_Project\\6th-create_and_use_Trackbar\\flower.jpg");
// Resize Orign_Image
resize(Orign_Image, Target_Size_Image, Target_Size_Image.size()); // 这里将Orign_Image的图像信息经过resize函数将其赋给变量Target_Size.
Empty_Matrix_To_Orign_Image = Mat::zeros(Target_Size_Image.size(), Target_Size_Image.type()); // 创建一个空矩阵,用于将原图的信息存储在其中
//设定对比度和亮度的初值
Contrast_Threshold = 0;
Intensity_Threshold = 0;
//创建窗口
namedWindow("【效果图窗口】", 1); // 这个窗口很关键,后边的两个进度条的显示都是在该窗口下实现的
//创建轨迹条
createTrackbar("对比度:", "【效果图窗口】", &Contrast_Threshold, 200, ContrastAndBright);
createTrackbar("亮 度:", "【效果图窗口】", &Intensity_Threshold, 200, ContrastAndBright);
//调用回调函数
ContrastAndBright(Contrast_Threshold, 0);
ContrastAndBright(Intensity_Threshold, 0);
//输出一些帮助信息
cout << endl << "OK! Please start your performance ! ";
//按下“q”键时,程序退出
while (char(waitKey(1)) != 'q') {}
return 0;
}
static void ContrastAndBright(int, void *)
{
//三个for循环,执行运算Orign_Image(i,j) = Contrast_Threshold*Target_Size_Image(i,j) +Intensity_Threshold
for (int y = 0; y < Target_Size_Image.rows; y++)
{
for (int x = 0; x < Target_Size_Image.cols; x++)
{
for (int c = 0; c < 3; c++)
{
Empty_Matrix_To_Orign_Image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>((Contrast_Threshold*0.01)*(Target_Size_Image.at<Vec3b>(y, x)[c]) + Intensity_Threshold);
}
}
}
//显示图像
imshow("【原始图窗口】", Target_Size_Image);
imshow("【效果图窗口】", Empty_Matrix_To_Orign_Image);
}
知识学习:
2.What's saturate_cast<uchar> ?
后记:
收假收心,每天进步一点点!