您的位置:首页 > 产品设计 > UI/UE

HighGUI的初步认识

2017-09-23 14:40 232 查看

OpenCV的高层GUI图形用户界面模块highgui的入门

highgui的入门可以先从这个个方面去入手

1. 图像的载入
imread:主要用于读取文件到OpenCV中
可以看看其官方的原型声明:


Mat imread(const string& filename,int flags=1);


1).第一个参数:const string&类型的filename,填我们需要载入的图片路径名
在Windows操作系统下,OpenCV的imread函数支持如下类型的图像载入
●Windows位图:*.bmp,*.dib
●JPEG文件:*.jpeg,*.jpg,*.jpe
●JPEG200文件:*.jp2
●PNG图片:*.png
●便携文件格式:*.pbm,*.pgm,*.ppm
●Sum rasters光栅文件:*.sr,*ras
●TIFF文件:*.tiff,*.tif
2).第二个参数,int型的flags,为载入标识,用来指定一个加载图像的颜色类型
有个默认值为1,所以在调用是可以省略
这个参数可以在OpenCV中标识图像的枚举中取值
可以在highgui_c.h中找到其枚举定义的原型:


enum
{
/* 8bit, color or not */
CV_LOAD_IMAGE_UNCHANGED  =-1,
/* 8bit, gray */
CV_LOAD_IMAGE_GRAYSCALE  =0,
/* ?, color */
CV_LOAD_IMAGE_COLOR      =1,
/* any depth, ? */
CV_LOAD_IMAGE_ANYDEPTH   =2,
/* ?, any color */
CV_LOAD_IMAGE_ANYCOLOR   =4
};


●CV_LOAD_IMAGE_UNCHANGED:等价取值为-1,这个标识基本已被废。忽略
●CV_LOAD_IMAGE_GRAYSCALE:等价取值0,如果取这个标识的话,始终将图像转换成灰度图像再返回
●CV_LOAD_IMAGE_COLOR:等价取值1,如果取这个标识的话,总是转换图像到彩色再返回
●CV_LOAD_IMAGE_ANYDEPTH:等价取值2,如果取这个标识的话,且载入的图像的深度是32位或者16位,就返回对应深度的图像,否则,就转换为8位图像再返回
●CV_LOAD_IMAGE_ANYCOLOR:等价取值4,如果取这个标识的话,载入无损的原图像
2. 图像显示
imshow:用于在指定窗口中显示一幅图像
官方声明如下:


void imshow(const string& winname,InputArray mat);


1).第一个参数:const string&类型的winname,填需要显示的窗口标识名称
2).第二个参数:InputArray类型的mat,填需要显示的图像
关于InputArray在初期学习中可以把它暂且当作Mat类来用
官方声明为:


typedef const _InputArray& InputArray;


3. 创建窗口
nameWindow:用于创建一个窗口
函数官方声明为:


void nameWindow(const string& winname,int flags=WINDOW_AUTOSIZE);


1).第一个参数,const string& winname:填写被用作窗口标识符的窗口名称
2).第二个参数:int类型的flags,窗口的标识,有如下值可选
●WINDOW_NORMAL:用户可以改变窗口的大小
●WINDOW_AUTOSIZE:窗口会自动调整以适应所显示的图像,用户不能手动更改
●WINDOW_OPENGL:窗口创建时会支持OpenGL
4. 输出图像到文件
imwrite:将一个图像文件输出到设定路径
官方声明如下:


bool imwrite(const string& filename,InputArray img,const vector<int>& params=vector<int>());


1).第一个参数,const string&类型的filename,填写需要写入的路径(imwrite函数保存图像的格式是基于文件扩展名的)
2).第二个参数,InputArray类型的img,上面有说明,就不说了
3).第三个参数,const vector<int>&类型的params,表示特定格式保存的参数编码,有默认值,一般不用写
5. 创建滑动条
creatTreackbar:用于创建一个可以调整数值的滑动条,并将其附加到指定窗口上,往往会和回调函数一起配合使用;
官方的声明为:


int creatTrackbar(const string& trackbarName,const string& winname,int* vakue,int count,TrackbarCallback onChange=0,void* userdata=0);


1).第一个参数,const string&类型的tarckbarname,轨迹条的名字,用来代表我们创建的轨迹
2).第二个参数,const string&类型的winname,窗口的名字,表示这个轨迹条会附到哪个窗口上,即对应nameWindow()创建的窗口时填的某一个窗口名
3).第三个参数,int* 类型的value,一个指向整型的指针,表示滑块的位置。在创建时,滑块的初始位置就是该变量的当前值
4).第四个参数,int 类型的count,表示滑块可以达到的最大值位置的值。(滑块最小位置值始终为0)
5).第五个参数,TrackbarCallback类型的onChange,它有默认值为0,这是一个回调函数的指针,每次滑块位置改变时,这个函数都会进行回调,并且这个函数的原型必须为void XXXXX(int,void*);,第一个位置是轨迹条的位置,第二个是用户数据,如果回调是NULL指针,则表示没有回调函数的调用,仅仅第三个参数value有变化
6).第六个参数,void* 类型的userdata,也有默认值为0.这个参数是用户传给回调函数的数据,用来处理轨迹事件。如果第三个参数value实参是全局变量的话,则不用去管userdata
6. 获取当前滑动条的位置
getTrackbarPos:配合creatTrackbar,用于返回获取当前滑动条的位置
官方声明为:


int getTrackbarPos(const string& trackname,const string& winname);


1).第一个参数,const string& 类型的trackname,表示轨迹条的名字
2).第二个参数,const string& 类型的winname,表示父窗口的名字
7. 鼠标操作
setMouseCallback:为指定窗口设置鼠标回调函数
官方声明如下:


void setMouseCallback(const string& winname,MouseCallback onMouse,void* userdata=0);


1).第一个参数,const string& 类型的winname,窗口的名字
2).第二个参数,MouseCallback类型的onMouse,指定窗口里每次鼠标事件发生的时候被调用的函数指针。函数原型为void XXX(int event,int x,int y,int flags,void* param);,其中event是EVENT_加变量之一,x和y是鼠标指针在图像坐标系中的坐标值,flags是EVENT_FLAG的组合,param是用户自定义的传递到setMouseCallback函数中调用的参数。
3).第三个参数,void* 类型的userdata,用户自定义传递到回调函数,有默认值为0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv highgui-h