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> ?

后记:

收假收心,每天进步一点点!

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