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

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

2018-02-05 09:26 543 查看
 在笔记二中我们已经知道了,在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、窗口标志:
//! Flags for cv::namedWindow
enum 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
    };
2、窗口属性:
//! Flags for cv::setWindowProperty / cv::getWindowProperty
enum 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  //!< 检测窗口是否存在并且是否可见
     };
3、鼠标事件
//! Mouse Events see cv::MouseCallback
enum 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 //!< 正值与负值分别表示鼠标向左与向右滚动
     };
4、鼠标事件
//! Mouse Event Flags see cv::MouseCallback
enum 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键按下
     };
5、字体粗细
//! Qt font weight
enum QtFontWeights {
        QT_FONT_LIGHT           = 25, //!< 字体粗细25
        QT_FONT_NORMAL          = 50, //!< 字体粗细50
        QT_FONT_DEMIBOLD        = 63, //!< 字体粗细63
        QT_FONT_BOLD            = 75, //!< 字体粗细75
        QT_FONT_BLACK           = 87  //!< 字体粗细87
     };

6、字体风格
//! Qt font style
enum QtFontStyles {
QT_STYLE_NORMAL = 0, //!< Normal font.

4000
QT_STYLE_ITALIC = 1, //!< Italic font.
QT_STYLE_OBLIQUE = 2 //!< Oblique font.
};
7、按钮
//! Qt "button" type
enum QtButtonTypes {
QT_PUSH_BUTTON = 0, //!< 按钮
QT_CHECKBOX = 1, //!< 复选框
QT_RADIOBOX = 2, //!< 单选框
QT_NEW_BUTTONBAR = 1024 //!< Button should create a new buttonbar
};
下面看看四种回调函数:

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  //!< 检测窗口是否存在并且是否可见

【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);设置
adef
轨迹条最小值。

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
按钮初始值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv基础