OpenCV GUI常用函数详解
在OpenCV的High_level GUI模组中有很多GUI函数,下面介绍几个常用的函数。
图像显示窗口相关函数
生成图像显示窗口函数nameWindow()
nameWindow()函数的原型如下:

函数用以创建一个给定名的图像显示窗口(后面简单叫做图像窗口),该窗口可以放置滑动条等控件,还可响应鼠标事件。
函数参数:
winname 图像窗口名
flags 窗口类型标志,有一下几种:

销毁图像窗口函数
销毁图像窗口函数有两个,其原型如下:

该函数销毁所有HighGUI 窗口。

该函数销毁指定窗口名的HighGUI 窗口。
获取图像窗口矩形函数getWindowImageRect()
getWindowImageRect()函数的原型如下:

该函数返回指定名窗口客户端屏幕坐标、图像渲染区域的宽度和高度组成的矩形。
获取图像窗口属性函数getWindowProperty
getWindowProperty()的原型如下:

该函数返回指定窗口属性。
函数参数:
Winname 窗口名称
prop_id 窗口属性标记, 有以下几种:

移动图像窗口函数moveWindow()
moveWindow()函数的原型如下:

该函数将指定图像窗口移动到指定位置。
函数参数:
winname 窗口名
X 新位置的横坐标
Y 新位置的纵坐标。
调整图像窗口图像显示区域大函数resizeWindow()
resizeWindow()函数的原型如下:

该函数功能是指定窗口图像区域大小,不包含工具条区域。
函数参数:
winname 窗口名
width 图像显示区域宽度
height 图像显示区域高度
选择感兴趣区域函数selectROI()
selectROI()有两个原型函数,如下:


该函数实现选取图像窗口中显示图像的ROI区域,该函数使用cv::setMouseCallback(windowName,…)为指定窗口设置自己的鼠标回调。工作完成后,将为已使用的窗口设置一个空回调。
函数参数:
winName 图像窗口名
img 输入图像
showCrosshair 如果为真,显示选择矩形的十字准线
fromCenter 如果为真,选择ROI中心与初始鼠标位置匹配。在相反的 情况下,选择矩形的一角将对应于初始鼠标位置。
printNotice 如果为真,将在控制台中打印选择ROI或取消选择的通知。
设置窗口属性函数setWindowProperty()
setWindowProperty()函数的原型如下:

setWindowProperty函数允许动态更改窗口的属性。
函数参数:
winname 窗口名
prop_id 属性id,可为以下几种之一:

prop_value 窗口属性新值,可以为以下几种之一:

函数参数:
winname 窗口名称
title 新的名称
启动窗口线程函数startWindowThread()
startWindowThread()原型如下:

在窗口中显示图像函数imshow()
imshow()函数的原型如下:

函数参数:
winname 窗口名
mat 含图像的mat对象。
延时等待按键输入函数waitKey()
waitKey()的原型如下:

如果delay小于或等于0,将无限期等待,直到有按键输入,才停止等待执行该包含函数语句后名程序。如果delay大于0,等待时间将以毫秒计,但等待时间并不是精确的。如果在等待时间内有按键输入,将会停止等待,执行后面程序,但这并非真正意义的立即停止,如果需要真正意义的立即执行后面程序,可使用pollKey()函数。
与鼠标操作相关的函数
获取鼠标滚轮运动增量函数getMouseWheelDeldlta()
getMouseWheelDeldlta()的原型如下:

对于带有滚轮的普通小鼠,delta将是120的倍数。值120对应于滚轮的一个凹口旋转或要采取行动的阈值,并且每个增量都应该发生一个这样的行动。一些具有更高分辨率的高精度鼠标自由旋转的轮子可能会产生更小的值。
参数 flags 鼠标回调标志参数。
鼠标事件相应函数类型MouseCallback
MouseCallback的定义如下:

参数:
envent 鼠标事件,鼠标事件有以下几种:

x 鼠标指针位置横坐标x
y 鼠标指针位置纵坐标x
flags 鼠标事件标志,可以是一下几种之一:

userdata 这是一个可选参数。
设置鼠标事件响应函数setMouseCallback()
setMouseCallback()函数的原型如下:

函数参数:
winname 图像窗口名
onMouse 鼠标事件相应函数名
userdata 传递给回调函数的可选参数。
与滑动条相关的函数
生成滑动条函数createTrackbar()
createTrackbar()的原型如下:

函数参数:
trackbarname 生成滑动条名称
winname 窗口名
value 指向整数变量的可选指针,其值反映滑块的位置。创建后,滑 块位置由此变量定义。
count 滑块的最大位置。最小位置始终为0。
onChange 指向每次滑块改变位置时要调用的函数的指针。这个函数应该被原型化为void Foo(int,void*),其中第一个参数是轨迹条位置,第二个参数是用户数据(见下一个参数)。如果回调是NULL指针,则不调用回调,只更新值。每次滑块改变位置时要调用的函数需为TrackbarCallback 类型,TrackbarCallback的定义如下:

UserData 按原样传递给回调函数的用户数据。它可用于处理轨迹栏事件,而无需使用全局变量。
获取滑动条游标位置函数getTrackbarPos()
getTrackbarPos()的原型如下:

改函数的返回值即为滑动条游标的位置。
函数参数:
trackbarname 滑块条名
winname 窗口名称
设置滑块条最大值位置函数setTrackbarMax()
setTrackbarMax()的原型如下:

函数参数:
trackbarname 滑块条名
winname 窗口名
maxVal 欲设置的最大值
设置滑块条最小值位置函数setTrackbarMin()
setTrackbarMin()的原型如下:

函数参数:
trackbarname 滑块条名
winname 窗口名
minVal 欲设置的最小值
示例程序
新建一个控制台应用程序来演示OpenCV GUI函数的用法。程序代码如下:
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{Mat src1 = imread("1.webp");if (src1.empty()){cout << "Cann't open image!" << endl;return -1;}namedWindow("Src", WINDOW_AUTOSIZE); //demo namedWindow()imshow("Src", src1); //demo imshow()Rect rec = getWindowImageRect("Src"); //demo getWindowImageRectcout << rec << endl;double dbData = getWindowProperty("Src", WND_PROP_AUTOSIZE); //demo getWindowProperty()cout << dbData << endl;dbData = getWindowProperty("Src", WND_PROP_FULLSCREEN); //demo getWindowProperty()cout << dbData << endl;waitKey(0);destroyWindow("Src"); //demo destroyWindownamedWindow("Src", WINDOW_NORMAL); //demo namedWindow()setWindowProperty("Src", WND_PROP_FULLSCREEN,WINDOW_FULLSCREEN);//demosetWindowPropertydbData = getWindowProperty("Src", WND_PROP_AUTOSIZE); //demo getWindowProperty()cout << dbData << endl;imshow("Src", src1); waitKey(0); //demo waitKey()return 0;
}
试运行, 结果如下;

按任意键后,结果如下:

图片满屏显示,控制台输出如下:

注释掉上面程序中main函数中的前部分,加入新代码来演示与鼠标 相关的函数用法,并在main函数的前面,添加一个 MouseCallback函数,代如下:
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;static void onMouse(int event, int x, int y, int flags, void* userIuput) //demo MouseCallback function
{Mat* pimg = (Mat*)userIuput;Rect rec(0,0,0,0);Mat roi;switch (event){ case EVENT_LBUTTONDOWN:circle(*pimg, Point(x, y), 20, Scalar(0, 0, 255), 2); rec = selectROI("Src", *pimg); //demo selectRoIroi = (*pimg)(rec);moveWindow("Src", x, y); //demo mmovebreak;case EVENT_MOUSEWHEEL:int mouseDelta = getMouseWheelDelta(flags); //demo getMouseWheelDeltamouseDelta /= 12;rec = getWindowImageRect("Src"); //demo getWindowImageRectresizeWindow("Src", Size(rec.width + mouseDelta, rec.height + mouseDelta)); //demo resizeWindowbreak;}imshow("Src", *pimg);if(!roi.empty())imshow("Roi", *pimg);
}int main()
{/*Mat src1 = imread("1.webp");if (src1.empty()){cout << "Cann't open image!" << endl;return -1;}namedWindow("Src", WINDOW_AUTOSIZE); //test namedWindow()imshow("Src", src1); //test imshow()Rect rec = getWindowImageRect("Src"); //test getWindowImageRectcout << rec << endl;double dbData = getWindowProperty("Src", WND_PROP_AUTOSIZE); //test getWindowProperty()cout << dbData << endl;dbData = getWindowProperty("Src", WND_PROP_FULLSCREEN); //test getWindowProperty()cout << dbData << endl;waitKey(0);destroyWindow("Src"); //test destroyWindownamedWindow("Src", WINDOW_NORMAL); //test namedWindow()setWindowProperty("Src", WND_PROP_FULLSCREEN, WINDOW_FULLSCREEN); //test setWindowPropertydbData = getWindowProperty("Src", WND_PROP_AUTOSIZE); //test getWindowProperty()cout << dbData << endl;imshow("Src", src1);*///demo mosue functionMat src1 = imread("1.webp");if (src1.empty()){cout << "Cann't open image!" << endl;return -1;}namedWindow("Src", WINDOW_AUTOSIZE); //test namedWindow()imshow("Src", src1); //test imshow()setMouseCallback("Src", onMouse, &src1); //demo setMouseCallbackwaitKey(0); //test waitKey()return 0;
}
试运行,结果如下:
在右眼位置,点击鼠标,结果如下:

依据提示,选择ROI,

然后按键盘的空格键,结果如下:

再测试下鼠标滚轮滚动效果,关闭掉试运行程序,重新试运行。

向后滚动滚轮,结果如下:

向前滚动滚轮结果如下:

下面演示一下与TrackBar相关函数的用法。添加TrackBar回调函数如下:

注释掉main函数的前面部分代码,添加新代码,如下:

试运行,结果如下:

将游标拖动到0,结果如下:

将将游标拖动到2,结果如下:

将将游标拖动到3,结果如下:

将将游标拖动到16,结果如下:

将将游标拖动到17,结果如下:

通过Trackbar实现了显示图片的切换。本示例程序就演示到这里,示例代码已上传到CSDN,下载链接为:https://download.csdn.net/download/billliu66/89754230
相关文章:
OpenCV GUI常用函数详解
在OpenCV的High_level GUI模组中有很多GUI函数,下面介绍几个常用的函数。 图像显示窗口相关函数 生成图像显示窗口函数nameWindow() nameWindow()函数的原型如下: 函数用以创建一个给定名的图像显示窗口(后面简单叫做图像窗口)…...
Tuxera NTFS for Mac破解版下载 Tuxera NTFS for Mac2023激活码 mac电脑ntfs磁盘软件
Tuxera NTFS for Mac是一款优秀的Mac系统完全读写软件,提供Fat32、NTFS、Exfat、mac os扩展格式的转换,稳定性好,传输速度极快。Tuxera NTFS for Mac功能丰富,能修复NTFS卷、创建NTFS磁盘映像、创建NTFS分区等等。同时软件支持所有…...
oceanbase(ob)基于备份集搭建备租户方式
一、搭建备租户方式(基于备份的方式) 注意事项:要有一个源端OB集群和目标端OB集群。 1、新建主租户(如果原来有主租户可是省略) #创建unit create resource unit ut_2c2g max_cpu2, memory_size2G, max_iops10000,l…...
Javase复习day21算法、arrays、Lamdba表达式
常见算法 查找算法 基本查找 package search;public class BasicSearchDemo1 {public static void main(String[] args) {//基本算法(顺序查找)int[] arr {131,23,57,37,95,48,57,43};System.out.println(basicSearch(arr, 43));}public static boo…...
移动硬盘无法读取?别慌!这些方法助你恢复数据!
在我们的日常工作和生活中,移动硬盘作为重要的数据存储工具,承载着珍贵资料。然而,移动硬盘无法被电脑读取的情况时有发生,令人焦急。别慌,下面为大家详细介绍恢复移动硬盘数据的有效方法。 一、检查硬件连接和驱动问题…...
Java集合面试(上)
Java集合面试(上) 集合概述 Java 集合,也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对 说说List,Set,Queue&#…...
Python画笔案例-046 绘制小红伞
1、绘制小红伞 通过 python 的turtle 库绘制 小红伞,如下图: 2、实现代码 绘制 小红伞,以下为实现代码: """小红伞.py """ import turtledef draw_pattern():"""画填充圆弧"&…...
使用 .NET 6 构建跨平台 Worker Service 服务:跨越平台的 C# 服务开发——解决Windows服务跨平台问题
现代软件开发中,构建跨平台的应用程序变得愈加重要。C# 和 .NET 6 的出现使得在 Windows、Linux 和 macOS 上创建背景服务变得简单而高效。在本指南中,我们将通过创建一个使用 .NET 6 的 Worker Service 来展示如何实现跨平台后台服务。 项目概述 我们…...
terminator-gnome
gnome import os#启动节点指令变量 stere"ros2 launch stereo_c start.py" utils"ros2 launch task utils.launch.py" #tab标题 stere_title"stere_driver" utils_title"utils"#一个终端界面打开5个tab cmd1f"gnome-terminal --…...
7.测试用例设计方法 + Bug
一、正交实验法 1.使用场景 因果关系比较庞大的情况下,不太适合用因果图判定表,在这种情况下,一般会采用正交实验法。 2.例子: 字符属性设置(4个条件) 字体很多 字符样式很多 …...
uniapp小程序,使用腾讯地图获取定位
本篇文章分享一下在实际开发小程序时遇到的需要获取用户当前位置的问题,在小程序开发过程中经常使用到获取定位功能。uniapp官方也提供了相应的API供我们使用。 官网地址:uni.getLocation(OBJECT)) 官网获取位置的详细介绍这里就不再讲述了,大…...
Reactive 编程-Project Reactor
Reactive 编程与 Project Reactor Reactive 编程是一种编程范式,主要用于处理异步数据流。它旨在通过声明式的编程方式处理事件驱动的非阻塞任务,特别适合于构建响应式、可扩展、高并发的应用。随着互联网应用规模的扩大和响应速度的提升需求࿰…...
splice用法
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
Redis - 缓存
文章目录 目录 文章目录 1. 什么是缓存? 2. 使用Redis作为缓存 2.1 关系型数据库的缺点 3. 缓存的更新策略 3.1 定期生成 3.2 实时生成 缓存淘汰策略 4. 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿 缓存预热 缓存穿透 缓存雪崩 缓存击穿 总结 1. 什么…...
基于SpringBoot+Vue的养老院管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…...
多线程爬虫接入代理IP:高效数据抓取的秘诀
在现代网络环境中,爬虫已经成为获取信息的利器。然而,随着网站反爬措施的不断升级,单线程爬虫往往无法满足需求。多线程爬虫与代理IP的结合,不仅能提高效率,还能有效规避IP封禁问题。本文将详细探讨多线程爬虫接入代理…...
[网络][CISCO]Cisco-PIX配置详解
Cisco PIX防火墙配置指南 任何企业安全策略的一个主要部分都是实现和维护防火墙,因此防火墙在网络安全的实现当中扮演着重要的角色。防火墙通常位于企业网络的边缘,使内部网络与Internet之间或与其他外部网络互相隔离,并限制网络互访&#x…...
拒绝千篇一律,AI帮你定制独一无二的个人写真
每个女人都渴望展现最美的自己,你是否厌倦了拍出千篇一律的照片?今天,我要告诉你一个秘密,用简单三步,即可打造属于你的独一无二个人写真!文生图、蒙版换脸、图生图,三步化身超级模特࿰…...
在云服务器上安装 RabbitMQ:从零到一的最佳实践
🛠 1. RabbitMQ 简介 RabbitMQ 是一个开源的消息代理中间件,广泛应用于高并发、异步任务队列的场景中。在分布式系统架构中,RabbitMQ 可以充当消息的中转站,帮助不同服务之间进行高效的消息通信。 在这篇文章中,我们…...
【nginx】搭配okhttp 配置反向代理
nginx的默认是一个反向代理。 nginx会默认把输入的请求,转向其他的服务器执行。 这些转向的服务器与客户端发起的服务器不是同一个。 客户端只认识nginx,不知道ngiix转向何方。 正向代理修改okhttp的proxy,实际上很多代理都是正向的。 反向代理修改请求路径到nginx。 感觉还…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
LINUX编译vlc
下载 VideoLAN / VLC GitLab 选择最新的发布版本 准备 sudo apt install -y xcb bison sudo apt install -y autopoint sudo apt install -y autoconf automake libtool编译ffmpeg LINUX FFMPEG编译汇总(最简化)_底部的附件列表中】: ffmpeg - lzip…...
