【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、窗口标志:
//! 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函数解析的更多相关文章
- OpenCV学习笔记四:ImgProc模块
一,简介 这个模块包含一系列的常用图像处理算法. 二,分析 此模块包含的文件如下图: 其导出算法包括如下: /*********************** Background statistics ...
- [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器
前言 C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法.另外C#2.0还提出了可空类型,匿名方法和迭 ...
- C#学习笔记四: C#3.0自动属性&匿名属性及扩展方法
前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好 ...
- opencv学习笔记(四)--图像平滑处理
图像平滑处理的几种常用方法: 均值滤波 归一化滤波 高斯模糊 中值滤波 平滑处理(模糊)的主要目的是去燥声: 不同的处理方式适合不同的噪声图像,其中高斯模糊最常用. 其实最重要的是对图像卷积的核的理解 ...
- opencv学习笔记(四)投影
opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...
- OpenCV 学习笔记 07 目标检测与识别
目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...
- (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU
首页 视界智尚 算法技术 每日技术 来打我呀 注册 OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...
- OpenCV 学习笔记03 findContours函数
opencv-python 4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...
随机推荐
- Vue知识随记
数据绑定内支持JavaScript表达式:string字符串反转用.隔开 js: msg:'Hello ' html: {{ msg.split('').reverse().join('.') }} ...
- css jquery 实现轮播效果
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- nexus搭建maven私服及私服jar包上传和下载
nexus搭建maven私服及私服jar包上传和下载 标签: nexus管理maven库snapshot 2017-06-28 13:02 844人阅读 评论(0) 收藏 举报 分类: Maven(1 ...
- django使用自己的setting的方法
创建一个自己的setting xxx.setting export DJANGO_SETTINGS_MODULE="xxx.setting" 然后在项目中import原生的sett ...
- php xmlrpc使用示例
xmlrpc 远程过程调用, 使用xml文本方式传输数据. soap协议比xmlrpc复杂并强大. 1.修改 php.ini,开启 xmlrpc 扩展 2.rpc_client.php <?ph ...
- SAP 4代增强
*20170325 160000 以下之外, 还有:.替代, -用过一次:.BTE -没用过,需要学习: 第二代增强和第三代增强的差别: 1.Tcode 不同:第二代: CMOD 增强管理,SMOD ...
- 【python】使用python发送文本内容邮件
下面提供了一个使用python做的发送文本内容的邮件代码,能够在邮件内容中设置文字颜色,大小,换行等功能. #auther by zls #_*_coding:utf-8_*_ import sys ...
- access 驱动在win64位出现问题
如果是调试的话,将应用程序池的 启动win32应用程序池 为 true
- 深入理解JVM - Java内存区域与内存溢出异常 - 第二章
一 运行时数据区域 JVM在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间. 程序计数器 程序计数器(Program Counter ...
- 分享知识-快乐自己:Linux—jdk 安装步骤
1.查看现有版本:java -version 2.查看jdk的具体版本: rpm -qa| grep jdk || rpm -qa| grep gcj 3.删除已安装jdk包: rpm -e --no ...