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

【opencv】HighGUI图形用户界面

2018-03-14 17:25 267 查看
HighGUI图形用户界面

1.   图像的载入imread()函数

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

第一个参数,const string&类型的filename,填我们需要载入的图片路径名。
第二个参数,int类型的flags,为载入标识,它指定一个加载图像的颜色类型。
flags存在两种取值方式:
a) 枚举类型取值

CV_LOAD_IMAGE_UNCHANGED= -1:这个标识在新版本中被废置了,忽略。
CV_LOAD_IMAGE_GRAYSCALE= 0:如果取这个标识的话,始终将图像转换成灰度图。
CV_LOAD_IMAGE_COLOR= 1:如果取这个标识的话,始终将图像转换成彩色图。
CV_LOAD_IMAGE_ANYDEPTH= 2:如果取这个标识的话,若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回。
CV_LOAD_IMAGE_ANYCOLOR= 4
注:如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH |CV_LOAD_IMAGE_ANYCOLOR。
b)  int整型取值
flags >0返回一个3通道的彩色图像。
flags =0返回灰度图像。
flags <0返回包含Alpha通道的加载的图像。

2.   图像的显示imshow()函数

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

第一个参数,const string&类型的winname,填需要显示的窗口标识名称。
第二个参数,InputArray类型的mat,填需要显示的图像。
imshow 函数用于在指定的窗口中显示图像。如果窗口是用CV_WINDOW_AUTOSIZE(默认值)标志创建的,那么显示图像原始大小。否则,将图像进行缩放以适合窗口。而imshow 函数缩放图像,取决于图像的深度:

如果载入的图像是8位无符号类型(8-bit unsigned),就显示图像本来的样子。
如果图像是16位无符号类型(16-bit unsigned)或32位整型(32-bit integer),便用像素值除以256。也就是说,值的范围是[0,255 x 256]映射到[0,255]。
如果图像是32位浮点型(32-bitfloating-point),像素值便要乘以255。也就是说,该值的范围是[0,1]映射到[0,255]。

3.   创建窗口namedWindow()函数

void namedWindow(conststring& winname,int flags=WINDOW_AUTOSIZE);
第一个参数,const string&型的name,即填被用作窗口的标识符的窗口名称。
第二个参数,int 类型的flags,窗口的标识,可以填如下的值:
WINDOW_NORMAL设置了这个值,用户便可以改变窗口的大小(没有限制)
WINDOW_AUTOSIZE如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小。
WINDOW_OPENGL 如果设置了这个值的话,窗口创建的时候便会支持OpenGL。
我们可以调用destroyWindow()或者destroyAllWindows()函数来关闭窗口,并取消之前分配的与窗口相关的所有内存空间。但话是这样说,其实对于代码量不大的简单小程序来说,我们完全没有必要手动调用上述的destroyWindow()或者destroyAllWindows()函数,因为在退出时,所有的资源和应用程序的窗口会被操作系统会自动关闭。

4.   输出图像到文件imwrite()函数

bool imwrite(const string& filename,InputArray imgconst vector<int>& params=vector<int>() ); 
第一个参数,const string&类型的filename,填需要写入的文件名就行了,带上后缀,比如,“123.jpg”这样。
第二个参数,InputArray类型的img,一般填一个Mat类型的图像数据就行了。
第三个参数,constvector<int>&类型的params,表示为特定格式保存的参数编码,它有默认值vector<int>(),所以一般情况下不需要填写。

5.   创建滑动条createTrackbar()函数

int createTrackbar(conststring&trackbarname, conststring& winnameint* value,int count,TrackbarCallback onChange=0,void* userdata=0);  
第一个参数,const string&类型的trackbarname,表示轨迹条的名字,用来代表我们创建的轨迹条。
第二个参数,const string&类型的winname,填窗口的名字,表示这个轨迹条会依附到哪个窗口上,即对应namedWindow()创建窗口时填的某一个窗口名。
第三个参数,int* 类型的value,一个指向整型的指针,表示滑块的位置。并且在创建时,滑块的初始位置就是该变量当前的值。
第四个参数,int类型的count,表示滑块可以达到的最大位置的值。PS:滑块最小的位置的值始终为0。
第五个参数,TrackbarCallback类型的onChange,首先注意他有默认值0。这是一个指向回调函数的指针,每次滑块位置改变时,这个函数都会进行回调。并且这个函数的原型必须为
        voidXXXX(int,void*);

第一个参数是轨迹条的位置,
第二个参数是用户数据(看下面的第六个参数)。如果回调是NULL指针,表示没有回调函数的调用,仅第三个参数value有变化。

第六个参数,void*类型的userdata,他也有默认值0。这个参数是用户传给回调函数的数据,用来处理轨迹条事件。如果使用的第三个参数value实参是全局变量的话,完全可以不去管这个userdata参数。
获取当前轨迹条的位置函数int getTrackbarPos(conststring& trackbarname, conststring& winname);  
第一个参数,const string&类型的trackbarname,表示轨迹条的名字。
第二个参数,const string&类型的winname,表示轨迹条的父窗口的名称。

6.   鼠标操作setMouseCallback()函数

void setMousecallback(conststring& winname, MouseCallback onMouse,void* userdata=0)
winname:窗口的名字
onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags,void* param);
userdate:传给回调函数的参数 
void on_Mouse(intevent, int x, int y, int flags, void* param);
event是 CV_EVENT_*变量之一

u CV_EVENT_MOUSEMOVE 0             //滑动 
u CV_EVENT_LBUTTONDOWN 1           //左键点击 
u CV_EVENT_RBUTTONDOWN 2           //右键点击 
u CV_EVENT_MBUTTONDOWN 3           //中键点击 
u CV_EVENT_LBUTTONUP 4             //左键放开 
u CV_EVENT_RBUTTONUP 5             //右键放开 
u CV_EVENT_MBUTTONUP 6             //中键放开 
u CV_EVENT_LBUTTONDBLCLK 7         //左键双击 
u CV_EVENT_RBUTTONDBLCLK 8         //右键双击 
u CV_EVENT_MBUTTONDBLCLK 9         //中键双击 

x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系) 
flags是CV_EVENT_FLAG的组合
u CV_EVENT_FLAG_LBUTTON 1       //左鍵拖曳 
u CV_EVENT_FLAG_RBUTTON 2       //右鍵拖曳 
u CV_EVENT_FLAG_MBUTTON 4       //中鍵拖曳 
u CV_EVENT_FLAG_CTRLKEY 8       //(8~15)按Ctrl不放事件 
u CV_EVENT_FLAG_SHIFTKEY 16     //(16~31)按Shift不放事件 
u CV_EVENT_FLAG_ALTKEY 32       //(32~39)按Alt不放事件

param是用户定义的传递到setMouseCallback函数调用的参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv