在笔记二中我们已经知道了,在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 = , //!< 全屏
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 = , //!< 全屏(can be WINDOW_NORMAL or WINDOW_FULLSCREEN).
WND_PROP_AUTOSIZE = , //!<自动大小(can be WINDOW_NORMAL or WINDOW_AUTOSIZE).
WND_PROP_ASPECT_RATIO = , //!< 保持纵横比(can be set to WINDOW_FREERATIO or WINDOW_KEEPRATIO).
WND_PROP_OPENGL = , //!< opengl窗口.
WND_PROP_VISIBLE = //!< 检测窗口是否存在并且是否可见
};

3、鼠标事件

 //! Mouse Events see cv::MouseCallback
enum MouseEventTypes {
EVENT_MOUSEMOVE = , //!< 鼠标在窗口上移动
EVENT_LBUTTONDOWN = , //!< 鼠标左键按下
EVENT_RBUTTONDOWN = , //!< 鼠标右键按下
EVENT_MBUTTONDOWN = , //!< 鼠标中键按下
EVENT_LBUTTONUP = , //!< 鼠标左键松开
EVENT_RBUTTONUP = , //!< 鼠标右键松开
EVENT_MBUTTONUP = , //!< 鼠标中键松开
EVENT_LBUTTONDBLCLK = , //!< 鼠标左键双击
EVENT_RBUTTONDBLCLK = , //!< 鼠标右键双击
EVENT_MBUTTONDBLCLK = , //!< 鼠标中键双击
EVENT_MOUSEWHEEL = ,//!< 正值与负值分别表示鼠标向前与向后滚动
EVENT_MOUSEHWHEEL = //!< 正值与负值分别表示鼠标向左与向右滚动
};

4、鼠标事件

 //! Mouse Event Flags see cv::MouseCallback
enum MouseEventFlags {
EVENT_FLAG_LBUTTON = , //!< 鼠标左键按下
EVENT_FLAG_RBUTTON = , //!< 鼠标右键按下
EVENT_FLAG_MBUTTON = , //!< 鼠标中键按下
EVENT_FLAG_CTRLKEY = , //!< CTRL键按下
EVENT_FLAG_SHIFTKEY = ,//!< SHIFT键按下
EVENT_FLAG_ALTKEY = //!< ALT键按下
};

5、字体粗细

 //! Qt font weight
enum QtFontWeights {
QT_FONT_LIGHT = , //!< 字体粗细25
QT_FONT_NORMAL = , //!< 字体粗细50
QT_FONT_DEMIBOLD = , //!< 字体粗细63
QT_FONT_BOLD = , //!< 字体粗细75
QT_FONT_BLACK = //!< 字体粗细87
};

6、字体风格

 //! Qt font style
enum QtFontStyles {
QT_STYLE_NORMAL = , //!< Normal font.
QT_STYLE_ITALIC = , //!< Italic font.
QT_STYLE_OBLIQUE = //!< Oblique font.
};

7、按钮

 //! Qt "button" type
enum QtButtonTypes {
QT_PUSH_BUTTON = , //!< 按钮
QT_CHECKBOX = , //!< 复选框
QT_RADIOBOX = , //!< 单选框
QT_NEW_BUTTONBAR = //!< 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);

设置轨迹条最小值。

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学习笔记四】opencv3.4.0图形用户接口highgui函数解析的更多相关文章

  1. OpenCV学习笔记四:ImgProc模块

    一,简介 这个模块包含一系列的常用图像处理算法. 二,分析 此模块包含的文件如下图: 其导出算法包括如下: /*********************** Background statistics ...

  2. [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器

    前言 C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法.另外C#2.0还提出了可空类型,匿名方法和迭 ...

  3. C#学习笔记四: C#3.0自动属性&匿名属性及扩展方法

    前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好 ...

  4. opencv学习笔记(四)--图像平滑处理

    图像平滑处理的几种常用方法: 均值滤波 归一化滤波 高斯模糊 中值滤波 平滑处理(模糊)的主要目的是去燥声: 不同的处理方式适合不同的噪声图像,其中高斯模糊最常用. 其实最重要的是对图像卷积的核的理解 ...

  5. opencv学习笔记(四)投影

    opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...

  6. OpenCV 学习笔记 07 目标检测与识别

    目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...

  7. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

  8. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  9. OpenCV 学习笔记03 findContours函数

    opencv-python   4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...

随机推荐

  1. Windows App开发之经常使用控件与应用栏

    控件的属性.事件与样式资源 怎样加入控件 加入控件的方式有多种,大家更喜欢以下哪一种呢? 1)使用诸如Blend for Visual Studio或Microsoft Visual Studio X ...

  2. NDK以及C语言基础语法(一)

    一.什么是NDK? Native Development Kit (本地开发工具包): NDK中提供了一系列的工具,帮助我们快速开发C/C++的动态库,并能自动将so文件和java文件一起打包成apk ...

  3. java项目中的classpath到底是什么

    https://segmentfault.com/a/1190000015802324

  4. wmiprvse.exe 进程占CPU过高 问题解决

    wmiprvse.exe是一个系统服务的进程,你可以结束任务,进程自然消失. 禁用Windows Management Instrumentation Driver Extensions服务或者改为手 ...

  5. There are two different types of export, named and default

    export - JavaScript | MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statemen ...

  6. iOS define 宏定义 和 const定义常量区别

    const   const 是c++中的修饰符.  c++中常用来定义常量,修饰左值. #define 宏定义语句, 在预处理阶段直接做文本替换,不做类型检查. 它们之间的最大区别: 1.  对于co ...

  7. SDUT OJ 之 连通分量个数 (dfs)

    数据结构实验:连通分量个数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  在无向图中,如果从顶点vi到顶点vj有路径,则称vi ...

  8. adaptiveThreshold自适应二值化源码分析

    自适应二值化介绍: 二值化算法是用输入像素的值I与一个值C来比较,根据比较结果确定输出值. 自适应二值化的每一个像素的比较值C都不同,比较值C由这个像素为中心的一个块范围计算在减去差值delta得到. ...

  9. HDU 2035 人见人爱A^B(二分求幂,快速求幂)

    题意:求A的B次方的后三位数字 思路1:常规求幂,直接取余求解 代码: #include<iostream> #include<cstdio> using namespace ...

  10. PHP中调用接口

    引用:http://zhidao.baidu.com/question/454935450.html&__bd_tkn__=67bd5d3a742a8b244e09a86fb8b824aa95 ...