【opencv学习笔记四】opencv3.4.0图形用户接口highgui函数解析

 

 在笔记二中咱们已经知道了,在highgui文件夹下的正是opencv图形用户接口功能结构,咱们这篇博客所说的即是D:\Program Files\opencv340\opencv\build\include\opencv2\highgui\highgui.hpp中的函数了。ssh

 

目录函数

 

【namedWindow】工具

【destroyWindow】字体

【destroyAllWindows】ui

【startWindowThread】spa

【waitKeyEx】线程

【waitKey】code

【imshow】orm

【resizeWindow】blog

【resizeWindow】

【moveWindow】

【setWindowProperty】

【setWindowTitle】

【getWindowProperty】

【setMouseCallback】

【getMouseWheelDelta】

【selectROI】

【selectROIs】

【createTrackbar】

【getTrackbarPos】

【setTrackbarPos】

【setTrackbarMax】

【setTrackbarMin】

【setOpenGlDrawCallback】

【setOpenGlContext】

【updateWindow】

【QtFont】

【addText】

【displayOverlay】

【displayStatusBar】

【saveWindowParameters】

【loadWindowParameters】

【createButton】

 

 

详细说明

 

 在讲函数以前,咱们先看一下即将用到的几种枚举类型和回调函数。首先是枚举类型:

 

一、窗口标志:

 1 //! Flags for cv::namedWindow
 2 enum WindowFlags {  3        WINDOW_NORMAL     = 0x00000000, //!< 用户可自由调整大小
 4        WINDOW_AUTOSIZE   = 0x00000001, //!< 窗口尺寸由图像决定,用户不可调节
 5        WINDOW_OPENGL     = 0x00001000, //!< opengl支持的窗口
 6 
 7        WINDOW_FULLSCREEN = 1,          //!< 全屏
 8        WINDOW_FREERATIO  = 0x00000100, //!< 最大化,不受图片纵横比影响
 9        WINDOW_KEEPRATIO  = 0x00000000, //!< 保持图像纵横比不变
10        WINDOW_GUI_EXPANDED=0x00000000, //!< 状态条与工具条
11        WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way
12     };

 


二、窗口属性:

1 //! Flags for cv::setWindowProperty / cv::getWindowProperty
2 enum WindowPropertyFlags { 3        WND_PROP_FULLSCREEN   = 0, //!< 全屏(can be WINDOW_NORMAL or WINDOW_FULLSCREEN).
4        WND_PROP_AUTOSIZE     = 1, //!<自动大小(can be WINDOW_NORMAL or WINDOW_AUTOSIZE).
5        WND_PROP_ASPECT_RATIO = 2, //!< 保持纵横比(can be set to WINDOW_FREERATIO or WINDOW_KEEPRATIO).
6        WND_PROP_OPENGL       = 3, //!< opengl窗口.
7        WND_PROP_VISIBLE      = 4  //!< 检测窗口是否存在而且是否可见
8      };

 


三、鼠标事件

 1 //! Mouse Events see cv::MouseCallback
 2 enum MouseEventTypes {  3        EVENT_MOUSEMOVE      = 0, //!< 鼠标在窗口上移动
 4        EVENT_LBUTTONDOWN    = 1, //!< 鼠标左键按下
 5        EVENT_RBUTTONDOWN    = 2, //!< 鼠标右键按下
 6        EVENT_MBUTTONDOWN    = 3, //!< 鼠标中键按下
 7        EVENT_LBUTTONUP      = 4, //!< 鼠标左键松开
 8        EVENT_RBUTTONUP      = 5, //!< 鼠标右键松开
 9        EVENT_MBUTTONUP      = 6, //!< 鼠标中键松开
10        EVENT_LBUTTONDBLCLK  = 7, //!< 鼠标左键双击
11        EVENT_RBUTTONDBLCLK  = 8, //!< 鼠标右键双击
12        EVENT_MBUTTONDBLCLK  = 9, //!< 鼠标中键双击
13        EVENT_MOUSEWHEEL     = 10,//!< 正值与负值分别表示鼠标向前与向后滚动
14        EVENT_MOUSEHWHEEL    = 11 //!< 正值与负值分别表示鼠标向左与向右滚动
15      };

 


四、鼠标事件

1 //! Mouse Event Flags see cv::MouseCallback
2 enum MouseEventFlags { 3        EVENT_FLAG_LBUTTON   = 1, //!< 鼠标左键按下
4        EVENT_FLAG_RBUTTON   = 2, //!< 鼠标右键按下
5        EVENT_FLAG_MBUTTON   = 4, //!< 鼠标中键按下
6        EVENT_FLAG_CTRLKEY   = 8, //!< CTRL键按下
7        EVENT_FLAG_SHIFTKEY  = 16,//!< SHIFT键按下
8        EVENT_FLAG_ALTKEY    = 32 //!< ALT键按下
9      };

 


五、字体粗细

1 //! Qt font weight
2 enum QtFontWeights { 3         QT_FONT_LIGHT           = 25, //!< 字体粗细25
4         QT_FONT_NORMAL          = 50, //!< 字体粗细50
5         QT_FONT_DEMIBOLD        = 63, //!< 字体粗细63
6         QT_FONT_BOLD            = 75, //!< 字体粗细75
7         QT_FONT_BLACK           = 87  //!< 字体粗细87
8      };

 

六、字体风格

1 //! Qt font style
2 enum QtFontStyles { 3         QT_STYLE_NORMAL         = 0, //!< Normal font.
4         QT_STYLE_ITALIC         = 1, //!< Italic font.
5         QT_STYLE_OBLIQUE        = 2  //!< Oblique font.
6      };


七、按钮

1 //! Qt "button" type
2 enum QtButtonTypes { 3        QT_PUSH_BUTTON   = 0,    //!< 按钮
4        QT_CHECKBOX      = 1,    //!< 复选框
5        QT_RADIOBOX      = 2,    //!< 单选框
6        QT_NEW_BUTTONBAR = 1024  //!< Button should create a new buttonbar
7      };

 


下面看看四种回调函数:

 

一、鼠标事件回调函数,用于函数setMouseCallback

typedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata);

int event

事件类型,值能够是MouseEventTypes常数:

  •        EVENT_MOUSEMOVE      = 0, //!< 鼠标在窗口上移动
  •        EVENT_LBUTTONDOWN    = 1, //!< 鼠标左键按下
  •        EVENT_RBUTTONDOWN    = 2, //!< 鼠标右键按下
  •        EVENT_MBUTTONDOWN    = 3, //!< 鼠标中键按下
  •        EVENT_LBUTTONUP      = 4, //!< 鼠标左键松开
  •        EVENT_RBUTTONUP      = 5, //!< 鼠标右键松开
  •        EVENT_MBUTTONUP      = 6, //!< 鼠标中键松开
  •        EVENT_LBUTTONDBLCLK  = 7, //!< 鼠标左键双击
  •        EVENT_RBUTTONDBLCLK  = 8, //!< 鼠标右键双击
  •        EVENT_MBUTTONDBLCLK  = 9, //!< 鼠标中键双击
  •        EVENT_MOUSEWHEEL     = 10,//!< 正值与负值分别表示鼠标向前与向后滚动
  •        EVENT_MOUSEHWHEEL    = 11 //!< 正值与负值分别表示鼠标向左与向右滚动

 

int x

X轴坐标。

 

int y

Y轴坐标。

 

int flags

事件标志,值为MouseEventFlags常量:

  •        EVENT_FLAG_LBUTTON   = 1, //!< 鼠标左键按下
  •        EVENT_FLAG_RBUTTON   = 2, //!< 鼠标右键按下
  •        EVENT_FLAG_MBUTTON   = 4, //!< 鼠标中键按下
  •        EVENT_FLAG_CTRLKEY   = 8, //!< CTRL键按下
  •        EVENT_FLAG_SHIFTKEY  = 16,//!< SHIFT键按下
  •        EVENT_FLAG_ALTKEY    = 32 //!< ALT键按下

 

void* userdata

用户返回参数,[可选]


二、轨迹条事件回调函数,用于函数createTrackbar

typedef void (*TrackbarCallback)(int pos, void* userdata);

int pos

轨迹条当前位置

void* userdata

用户返回参数,[可选]


三、回调函数,用于函数setOpenGlDrawCallback

typedef void (*OpenGlDrawCallback)(void* userdata);

void* userdata

用户返回参数,[可选]


四、按钮事件回调函数,用于函数createButton

typedef void (*ButtonCallback)(int state, void* userdata);

int state

当前按钮状态,按钮-1,复选框与单选框为0或1。

 

void* userdata

用户返回参数,[可选]

 

 

下面开始说明各个函数的功能。

 

【namedWindow】

void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);

该函数建立一个窗口,而且窗口名称为该窗口的惟一标识,若是要建立的窗口名称已经存在,则该函数什么也不作。

窗口能够经过destroyWindow与destroyAllWindows销毁。

 

const String& winname

窗口名称。

int flags

窗口标志。使用WindowFlags常量:

  •        WINDOW_NORMAL     = 0x00000000, //!< 用户可自由调整大小
  •        WINDOW_AUTOSIZE   = 0x00000001, //!< 窗口尺寸由图像决定,用户不可调节
  •        WINDOW_OPENGL     = 0x00001000, //!< opengl支持的窗口
  •        WINDOW_FULLSCREEN = 1,          //!< 全屏
  •        WINDOW_FREERATIO  = 0x00000100, //!< 最大化,不受图片纵横比影响
  •        WINDOW_KEEPRATIO  = 0x00000000, //!< 保持图像纵横比不变
  •        WINDOW_GUI_EXPANDED=0x00000000, //!< 状态条与工具条
  •        WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way

 

【destroyWindow】

void destroyWindow(const String& winname);

销毁由const String& winname指定名称的窗口。

【destroyAllWindows】

void destroyAllWindows();

销毁全部窗口。

 

【startWindowThread】

int startWindowThread();

开始窗口线程。

【waitKey】【waitKeyEx】

int waitKey(int delay = 0);
int waitKeyEx(int delay = 0);

等待按键按下,并返回按键值。waitKeyEx返回的是完整的按键值。

 

int delay为等待时间。

【imshow】

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

在指定的窗口上显示图像。

 

const String& winname

窗口名称。

 

InputArray mat

要显示的图像。

 

【resizeWindow】

void resizeWindow(const String& winname, int width, int height);
void resizeWindow(const String& winname, const cv::Size& size);

调整窗口大小。

 

const String& winname

窗口名称。

 

int width

新宽度。

 

int height

新高度。

 

const cv::Size& size

新窗口大小。

 

【moveWindow】

void moveWindow(const String& winname, int x, int y);

窗口移动。

 

const String& winname

窗口名称。

 

int x

移动后坐标x

 

int y

移动后坐标y

 

【setWindowProperty】

void setWindowProperty(const String& winname, int prop_id, double prop_value);

设置窗口属性。

 

const String& winname

窗口名称。

int prop_id

要更改的窗口化属性。其值能够为WindowPropertyFlags常量:

  •        WND_PROP_FULLSCREEN   = 0, //!< 全屏(can be WINDOW_NORMAL or WINDOW_FULLSCREEN).
  •        WND_PROP_AUTOSIZE     = 1, //!<自动大小(can be WINDOW_NORMAL or WINDOW_AUTOSIZE).
  •        WND_PROP_ASPECT_RATIO = 2, //!< 保持纵横比(can be set to WINDOW_FREERATIO or WINDOW_KEEPRATIO).
  •        WND_PROP_OPENGL       = 3, //!< opengl窗口.
  •        WND_PROP_VISIBLE      = 4  //!< 检测窗口是否存在而且是否可见

 

double prop_value

新窗口属性值。其值能够为WindowFlags常量:

  •        WINDOW_NORMAL     = 0x00000000, //!< 用户可自由调整大小
  •        WINDOW_AUTOSIZE   = 0x00000001, //!< 窗口尺寸由图像决定,用户不可调节
  •        WINDOW_OPENGL     = 0x00001000, //!< opengl支持的窗口
  •        WINDOW_FULLSCREEN = 1,          //!< 全屏
  •        WINDOW_FREERATIO  = 0x00000100, //!< 最大化,不受图片纵横比影响
  •        WINDOW_KEEPRATIO  = 0x00000000, //!< 保持图像纵横比不变
  •        WINDOW_GUI_EXPANDED=0x00000000, //!< 状态条与工具条
  •        WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way

 

【setWindowTitle】

void setWindowTitle(const String& winname, const String& title);

更新窗口标题。

【getWindowProperty】

double getWindowProperty(const String& winname, int prop_id);

获取窗口属性。

const String& winname

窗口名称。

int prop_id

要获取的窗口属性。其值能够为WindowPropertyFlags常量:

  •        WND_PROP_FULLSCREEN   = 0, //!< 全屏(can be WINDOW_NORMAL or WINDOW_FULLSCREEN).
  •        WND_PROP_AUTOSIZE     = 1, //!<自动大小(can be WINDOW_NORMAL or WINDOW_AUTOSIZE).
  •        WND_PROP_ASPECT_RATIO = 2, //!< 保持纵横比(can be set to WINDOW_FREERATIO or WINDOW_KEEPRATIO).
  •        WND_PROP_OPENGL       = 3, //!< opengl窗口.
  •        WND_PROP_VISIBLE      = 4  //!< 检测窗口是否存在而且是否可见

 

【setMouseCallback】

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

对指定窗口设置鼠标处理函数。

const String& winname

窗口名称。

 

MouseCallback onMouse

鼠标回调函数。

回调函数定义

typedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata);

void* userdata

用户返回数据。

 

【getMouseWheelDelta】

int getMouseWheelDelta(int flags);

在处理鼠标滚轮事件EVENT_MOUSEWHEEL与EVENT_MOUSEHWHEEL时,返回鼠标的运动增量。对于普通鼠标而言,这个值一般为120的倍数。


int flags

鼠标返回标志。

 

【selectROI】

Rect selectROI(const String& windowName, InputArray img, bool showCrosshair = true, bool fromCenter = false);
Rect selectROI(InputArray img, bool showCrosshair = true, bool fromCenter = false);

在给定的图像上选择一个ROI区域。该函数建立一个窗口而且容许用户经过鼠标选择一个ROI区域,经过空格键或Enter键结束选择,经过C键取消选择,取消选择后返回一个空的矩形框。


const String& windowName

显示操做过程的窗口名称。

 

InputArray img

图像。

 

bool showCrosshair

值为ture时,将显示矩形框的十字线。

 

bool fromCenter

值为ture时,鼠标初始点做为矩形框的中点;值为false时,鼠标初始点为矩形的一个拐角。

 

【selectROIs】

void selectROIs(const String& windowName, InputArray img,
                             CV_OUT std::vector<Rect>& boundingBoxes, bool showCrosshair = true, bool fromCenter = false);

选择多个矩形框,与selectROI相似。

 

【createTrackbar】

int createTrackbar(
    const String& trackbarname, 
    const String& winname,                          
    int* value, 
    int count,                           
    TrackbarCallback onChange = 0,                            
    void* userdata = 0    );

建立轨迹条。

const String& trackbarname

轨迹条名称。

 

const String& winname

显示轨迹条的窗口名称。

               
int* value

轨迹条的当前值。

 

int count

轨迹条的最大值,最小值总为0。

 

TrackbarCallback onChange    

轨迹条回调函数。

typedef void (*TrackbarCallback)(int pos, void* userdata);

               
void* userdata

用户返回数据。

 

【getTrackbarPos】

int getTrackbarPos(const String& trackbarname, const String& winname);


获取轨迹条当前位置。

 

const String& trackbarname

轨迹条名称。

 

const String& winname

窗口名称。

 

【setTrackbarPos】

void setTrackbarPos(const String& trackbarname, const String& winname, int pos);

设置轨迹条当前位置。

 

const String& trackbarname

轨迹条名称。

 

const String& winname

窗口名称。

 

int pos

轨迹条位置。

 

【setTrackbarMax】

void setTrackbarMax(const String& trackbarname, const String& winname, int maxval);

设置轨迹条最大值。

 

const String& trackbarname

轨迹条名称。

 

const String& winname

窗口名称。

 

int maxval

轨迹条最大值。

 

【setTrackbarMin】

void setTrackbarMin(const String& trackbarname, const String& winname, int minval);

设置轨迹条最小值。

 

const String& trackbarname

轨迹条名称。

 

const String& winname

窗口名称。

 

int minval

轨迹条最小值。

 

【setOpenGlDrawCallback】

void setOpenGlDrawCallback(const String& winname, OpenGlDrawCallback onOpenGlDraw, void* userdata = 0);

调用回调函数,在图像最上层绘画。

 

const String& winname

窗口名称。

 

OpenGlDrawCallback onOpenGlDraw

回调函数。

typedef void (*OpenGlDrawCallback)(void* userdata);

 

void* userdata

用户返回数据。

 

【setOpenGlContext】

void setOpenGlContext(const String& winname);

将制定窗口设定为openGL的关联窗口。

【updateWindow】

void updateWindow(const String& winname);

强制窗口从新调用setOpenGlContext。

【QtFont】

struct QtFont
{
    const char* nameFont;  //!< 字体名称
    Scalar      color;     //!< 字体颜色
    int         font_face; //!< 字体风格
    const int*  ascii;     //!< 字体粗细
    const int*  greek;
    const int*  cyrillic;
    float       hscale, vscale;
    float       shear;     //!< slope coefficient: 0 - normal, >0 - italic
    int         thickness; //!< See cv::QtFontWeights
    float       dx;        //!< horizontal interval between letters
    int         line_type; //!< PointSize
};

字体格式。

【addText】

void addText( const Mat& img, const String& text, Point org, const QtFont& font);

在指定图像上添加文字。

【displayOverlay】

void displayOverlay(const String& winname, const String& text, int delayms = 0);

显示图像overlay文本。

【displayStatusBar】

void displayStatusBar(const String& winname, const String& text, int delayms = 0);

显示状态栏文本。

 

【saveWindowParameters】

void saveWindowParameters(const String& windowName);

保存指定窗口的参数。

【loadWindowParameters】

void loadWindowParameters(const String& windowName);

加载指定窗口的参数。

 

【createButton】

int createButton( 
	const String& bar_name, 
	ButtonCallback on_change,                         
	void* userdata = 0, 
	int type = QT_PUSH_BUTTON,                           
	bool initial_button_state = false	);

建立按钮。

const String& bar_name

用于建立按钮的窗口名称。

 

ButtonCallback on_change

按钮回调函数。

typedef void (*ButtonCallback)(int state, void* userdata);

 

void* userdata

用户返回数据。

 

int type

按钮类型。

 

bool initial_button_state

按钮初始值。

相关文章
相关标签/搜索