OpenCv学习笔记(八)---细说HighGUI(图像用户界面)之滑动条createTrackbar()详解

(一)OpenCv中HighGUI(图形用户界面)的简述
	1--OpenCv中将与操作系统,文件系统和摄像机之间的硬件交互的一些函数纳入了HighGUI
		(high-level graphical user interface)高级图形用户界面的库中。有了HighGUI,
		我们可以方便的打开窗口,显示图像,读出或者写入图像相关的文件(包含图像和视频),
		处理简单的鼠标,光标,和键盘事件
	2--也可以使用HighGUI创建其他很有用的控件,比如常见的滑动条,并且把它们加入到窗口,
		如果对自己所使用的系统的图像用户界面非常熟悉,也许会认为HighGUI提供的很多功
		能没有必要,但即使如此,HighGUI的跨平台性对你的帮助也会很大
	3--OpenCv中的HighGUI可以分为三部分:
			1---硬件相关部分
			2---文件部分
			3---图形用户界面部分
	1---硬件部分最主要的----就是对于摄像机的操作,在大多数操作系统下,与摄像机交互是一
	    件很复杂并且痛苦的工作。HighGUI提供了一种从摄像机中获取图像的简单方法,所有
		复杂的工作都在HighGUI内部完成
	2---文件系统部分主要的工作就是载入与保存图像文件.HighGUI一个很好的特点就是可以用
	    与读取摄像机视频相同的方法读入视频文件。这使得我们可以省去处理从各种特定设备
		中读入数据的麻烦
	3---HighGUI的第三部分是窗口系统,或者成为GUI.HighGUI提供了一些简单的函数用来打开窗
	    口以及将图像显示在窗口中。它同时为我们提供了为窗口加入鼠标,键盘响应的方法,这些
		函数为我们快速建立一个简单的应用程序提供了很大的帮助,一种变通的方式,我们可以使
		用滑动条实现切换功能.我们发现使用HighGUI可以实现很多使用的程序
(二)OpenCv的命名空间
	1--OpenCv中的C++类和函数都是定义在命名空间cv之内的
	2--一般在写一个简答的OpenCv应用程序的时候,以下这三句是标配:
			1--#include<opencv2/core/core.hpp>              //OpenCv中的核心模块,包括基本的数据结构和类型等
			2--#include<opencv2/highgui/highgui.hpp>
			3--using namespace cv;
(三)图像的载入与显示的概述
    1--在OpenCv2中,最简单的图像载入和显示最需要两句代码,非常便捷.这两句代码分别对应两个
	   函数,它们分别是imread()以及imshow()
	2--图像的载入:
		 Mat imread("图片的路径名",载入表示,它指定一个加载图片的颜色类型);
    3--图像的显示:
		void imshow("要显示的窗口标识",要显示的图像);
(四)关于InputArray类型和创建窗口
    1--我们可以把InputArray简单的当做Mat类型即可
	2--创建窗口:namedWindow()函数
	    namedWindow("被用作窗口的标识符的窗口名称",窗口的标识);
			1--WINDOW_NORMAL----设置这个值,用户可以改变窗口的大小
			2--WINDOW_AUTOSIZE--设置这个值,窗口的大小会自动的调整以适应显示的图像
			3--WINDOW_OPENGL----设置这个值,窗口创建的时候会支持OpenGl
(五)输入图像到文件imwrite()函数
	1--在OpenCv中,输出图像到文件一般采用imwrite函数,它的声明如下所示:
		bool imwrite("填写需要写入的文件名.jpg",InoutArray img,一般不需要填写);
	2--imwrite函数,用于将图像保存到指定的文件,图像格式是基于扩展名的
(六)waitKey()函数详解
	1--waitKey()--这个函数是在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下
	   键,则接续等待(循环)
	2--如下所示:
		while(1){
			if(waitKey(100)==27)break;
		}
		在这个程序中,我们告诉OpenCv等待用户触发事件,等待时间为100ms,如果在这个时间段内,
		用户按下ESC(ASCII码为27),则跳出循环,否则,则跳出循环
	3--如果设置waitKey(0),则表示程序会无限制的等待用户的按键事件
(七)滑动条的创建和使用
	1--滑动条(Trackbar)是OpenCv动态调节参数特别好的一种工具,它依附于窗口而存在
	2--创建滑动条createTrackbar()函数:
			1--createTrackbar函数用于创建一个可以调节整数值的滑动条,并将滑动条附加到指定
			   的窗口上,使用起来很方便。但需要记住,它往往会和一个回调函数配合起来使用
			2--int createTrackbar("滑动条的名字","附加到窗口的名字",int* value,int count,
			   TrackbarCallback onChange=0;void userdata=0)   
				3--int* value--一个指向整形的指针,表示滑块的位置;在创建滑块是,滑块的初始
				   位置就是该变量当前的值
				4--int count--滑块可以到达的最大位置
				5--TrackbarCallback onChange=0----这是一个指向回调函数的指针,每次滑块位置
				   改变时,都会调用这个函数,并且这个函数的原型必须为void XXXX(int,void*)
						1--其中第一个参数是轨迹的---位置
						2--第二个参数是---用户数据
/*********************************************************************************************
程序功能:
        滑动条的创建和使用
编写环境:
        OpenCv2.4.8+VS2010
地点时间:
        陕西师范大学 2016.4.26
作者信息:
        九月
**********************************************************************************************/
/***********************************【函数的头文件和命名空间】********************************/
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>

using namespace cv;


/******************************************【宏定义】****************************************/
#define WINDOW_NAME "【线性混合示例】"


/***************************************【全局变量声明部分】**********************************/
const  int nMaxAlphaValue=100;           //Alpha的最大值
int    nAlphaValueSlider;                //滑动条对应的变量
double dAlphaValue;
double dBetaValue;

//声明存储图像的变量
Mat srcImg1;
Mat srcImg2;
Mat dstImg;
/***************************************【全局函数声明部分】**********************************/

void trackBar(int,void*);




/********************************************【main函数】*************************************/
int main(int argc,char** argv)
{
	//【1】载入两幅带有Alpha通道的图片
	srcImg1=imread("D:\\17.png",CV_LOAD_IMAGE_COLOR);
	srcImg2=imread("D:\\18.png",CV_LOAD_IMAGE_COLOR);

	//【2】设置滑动条的初始位置为50
	nAlphaValueSlider=50;

	//【3】创建一个窗体
	namedWindow(WINDOW_NAME,WINDOW_NORMAL);

	//【4】在创建的窗体中创建一个滑动条
	createTrackbar("透明值",WINDOW_NAME,&nAlphaValueSlider,nMaxAlphaValue,trackBar,0);

	//结果在回调函数中显示
	trackBar(nAlphaValueSlider,0);


	//按任意键退出6
	waitKey(0);
	return 0;
}

/***************************************************************************************************
函数功能:
       响应滑动条的回调函数
函数参数:
       1---int------滑动条的位置
	   2---void*----用户数据
函数返回值:
       无
***************************************************************************************************/
void trackBar(int,void*)
{
	//求出Alpha值相对于最大值的比例
	dAlphaValue=(double)nAlphaValueSlider/nMaxAlphaValue;
	//beta值为1减去alpha值
	dBetaValue=(1.0-dAlphaValue);

	//根据alpha和beta的值进行现行混合
	addWeighted(srcImg1,dAlphaValue,srcImg2,dBetaValue,0.0,dstImg);

	//显示效果图
	imshow(WINDOW_NAME,dstImg);
}




OpenCv学习笔记(八)---细说HighGUI(图像用户界面)之滑动条createTrackbar()详解_第1张图片

你可能感兴趣的:(OpenCv学习笔记(八)---细说HighGUI(图像用户界面)之滑动条createTrackbar()详解)