【opencv】HighGUI图形用户界面

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,窗口的标识,可以填如下的值:
  1. WINDOW_NORMAL设置了这个值,用户便可以改变窗口的大小(没有限制)
  2. WINDOW_AUTOSIZE如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小。
  3. WINDOW_OPENGL 如果设置了这个值的话,窗口创建的时候便会支持OpenGL。

我们可以调用destroyWindow()或者destroyAllWindows()函数来关闭窗口,并取消之前分配的与窗口相关的所有内存空间。但话是这样说,其实对于代码量不大的简单小程序来说,我们完全没有必要手动调用上述的destroyWindow()或者destroyAllWindows()函数,因为在退出时,所有的资源和应用程序的窗口会被操作系统会自动关闭。

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

bool imwrite(const string& filename,

InputArray img

const vectorparams=vector() ); 

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

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

int createTrackbar(conststring&trackbarname,

conststring& winname

int* 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*);

  1. 第一个参数是轨迹条的位置,
  2. 第二个参数是用户数据(看下面的第六个参数)。如果回调是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_*变量之一
  1. u CV_EVENT_MOUSEMOVE 0             //滑动 
  2. u CV_EVENT_LBUTTONDOWN 1           //左键点击 
  3. u CV_EVENT_RBUTTONDOWN 2           //右键点击 
  4. u CV_EVENT_MBUTTONDOWN 3           //中键点击 
  5. u CV_EVENT_LBUTTONUP 4             //左键放开 
  6. u CV_EVENT_RBUTTONUP 5             //右键放开 
  7. u CV_EVENT_MBUTTONUP 6             //中键放开 
  8. u CV_EVENT_LBUTTONDBLCLK 7         //左键双击 
  9. u CV_EVENT_RBUTTONDBLCLK 8         //右键双击 
  10. u CV_EVENT_MBUTTONDBLCLK 9         //中键双击 

  • x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系) 
  • flags是CV_EVENT_FLAG的组合
    1. u CV_EVENT_FLAG_LBUTTON 1       //左鍵拖曳 
    2. u CV_EVENT_FLAG_RBUTTON 2       //右鍵拖曳 
    3. u CV_EVENT_FLAG_MBUTTON 4       //中鍵拖曳 
    4. u CV_EVENT_FLAG_CTRLKEY 8       //(8~15)按Ctrl不放事件 
    5. u CV_EVENT_FLAG_SHIFTKEY 16     //(16~31)按Shift不放事件 
    6. u CV_EVENT_FLAG_ALTKEY 32       //(32~39)按Alt不放事件
  • param是用户定义的传递到setMouseCallback函数调用的参数。

你可能感兴趣的:(opencv)