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

本文主要是介绍【opencv学习笔记四】opencv3.4.0图形用户接口highgui函数解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

 

【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 - italicint         thickness; //!< See cv::QtFontWeightsfloat       dx;        //!< horizontal interval between lettersint         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函数解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/184439

相关文章

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日