Opencv第五講:Trackbar創建及應用

前言:

開發環境: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);
}

知識學習:

1.What's <Vec3b> ?

2.What's  saturate_cast<uchar> ?

後記:

收假收心,每天進步一點點!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章