【opencv学习笔记四】opencv3.4.0图形用户接口highgui函数解析
在笔记二中我们已经知道了,在highgui文件夹下的正是opencv图形用户接口功能结构,我们这篇博客所说的便是D:\Program Files\opencv340\opencv\build\include\opencv2\highgui\highgui.hpp中的函数了。
目录
【namedWindow】
【destroyWindow】
【destroyAllWindows】
【startWindowThread】
【waitKeyEx】
【waitKey】
【imshow】
【resizeWindow】
【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、窗口标志:
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 };
2、窗口属性:
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 };
3、鼠标事件
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 };
4、鼠标事件
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 };
5、字体粗细
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 };
6、字体风格
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 };
7、按钮
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 };
下面看看四种回调函数:
1、鼠标事件回调函数,用于函数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
用户返回参数,[可选]
2、轨迹条事件回调函数,用于函数createTrackbar
typedef void (*TrackbarCallback)(int pos, void* userdata);
int pos
轨迹条当前位置
void* userdata
用户返回参数,[可选]
3、回调函数,用于函数setOpenGlDrawCallback
typedef void (*OpenGlDrawCallback)(void* userdata);
void* userdata
用户返回参数,[可选]
4、按钮事件回调函数,用于函数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 //!< 检测窗口是否存在并且是否可见