前言:
開發環境: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> ?
後記:
收假收心,每天進步一點點!