当前位置: 首页 > news >正文

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:setMouseCallbackwindowName)为指定窗口设置自己的鼠标回调。工作完成后,将为已使用的窗口设置一个空回调。

函数参数:

       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 Foointvoid*),其中第一个参数是轨迹条位置,第二个参数是用户数据(见下一个参数)。如果回调是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函数&#xff0c;下面介绍几个常用的函数。 图像显示窗口相关函数 生成图像显示窗口函数nameWindow() nameWindow()函数的原型如下&#xff1a; 函数用以创建一个给定名的图像显示窗口&#xff08;后面简单叫做图像窗口&#xff09;…...

Tuxera NTFS for Mac破解版下载 Tuxera NTFS for Mac2023激活码 mac电脑ntfs磁盘软件

Tuxera NTFS for Mac是一款优秀的Mac系统完全读写软件&#xff0c;提供Fat32、NTFS、Exfat、mac os扩展格式的转换&#xff0c;稳定性好&#xff0c;传输速度极快。Tuxera NTFS for Mac功能丰富&#xff0c;能修复NTFS卷、创建NTFS磁盘映像、创建NTFS分区等等。同时软件支持所有…...

oceanbase(ob)基于备份集搭建备租户方式

一、搭建备租户方式&#xff08;基于备份的方式&#xff09; 注意事项&#xff1a;要有一个源端OB集群和目标端OB集群。 1、新建主租户&#xff08;如果原来有主租户可是省略&#xff09; #创建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) {//基本算法&#xff08;顺序查找&#xff09;int[] arr {131,23,57,37,95,48,57,43};System.out.println(basicSearch(arr, 43));}public static boo…...

移动硬盘无法读取?别慌!这些方法助你恢复数据!

在我们的日常工作和生活中&#xff0c;移动硬盘作为重要的数据存储工具&#xff0c;承载着珍贵资料。然而&#xff0c;移动硬盘无法被电脑读取的情况时有发生&#xff0c;令人焦急。别慌&#xff0c;下面为大家详细介绍恢复移动硬盘数据的有效方法。 一、检查硬件连接和驱动问题…...

Java集合面试(上)

Java集合面试(上) 集合概述 Java 集合&#xff0c;也叫作容器&#xff0c;主要是由两大接口派生而来&#xff1a;一个是 Collection接口&#xff0c;主要用于存放单一元素&#xff1b;另一个是 Map 接口&#xff0c;主要用于存放键值对 说说List&#xff0c;Set,Queue&#…...

Python画笔案例-046 绘制小红伞

1、绘制小红伞 通过 python 的turtle 库绘制 小红伞&#xff0c;如下图&#xff1a; 2、实现代码 绘制 小红伞&#xff0c;以下为实现代码&#xff1a; """小红伞.py """ import turtledef draw_pattern():"""画填充圆弧"&…...

使用 .NET 6 构建跨平台 Worker Service 服务:跨越平台的 C# 服务开发——解决Windows服务跨平台问题

现代软件开发中&#xff0c;构建跨平台的应用程序变得愈加重要。C# 和 .NET 6 的出现使得在 Windows、Linux 和 macOS 上创建背景服务变得简单而高效。在本指南中&#xff0c;我们将通过创建一个使用 .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.使用场景 因果关系比较庞大的情况下&#xff0c;不太适合用因果图判定表&#xff0c;在这种情况下&#xff0c;一般会采用正交实验法。 2.例子&#xff1a; 字符属性设置&#xff08;4个条件&#xff09; 字体很多 字符样式很多 …...

uniapp小程序,使用腾讯地图获取定位

本篇文章分享一下在实际开发小程序时遇到的需要获取用户当前位置的问题&#xff0c;在小程序开发过程中经常使用到获取定位功能。uniapp官方也提供了相应的API供我们使用。 官网地址&#xff1a;uni.getLocation(OBJECT)) 官网获取位置的详细介绍这里就不再讲述了&#xff0c;大…...

Reactive 编程-Project Reactor

Reactive 编程与 Project Reactor Reactive 编程是一种编程范式&#xff0c;主要用于处理异步数据流。它旨在通过声明式的编程方式处理事件驱动的非阻塞任务&#xff0c;特别适合于构建响应式、可扩展、高并发的应用。随着互联网应用规模的扩大和响应速度的提升需求&#xff0…...

splice用法

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

Redis - 缓存

文章目录 目录 文章目录 1. 什么是缓存&#xff1f; 2. 使用Redis作为缓存 2.1 关系型数据库的缺点 3. 缓存的更新策略 3.1 定期生成 3.2 实时生成 缓存淘汰策略 4. 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿 缓存预热 缓存穿透 缓存雪崩 缓存击穿 总结 1. 什么…...

基于SpringBoot+Vue的养老院管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…...

多线程爬虫接入代理IP:高效数据抓取的秘诀

在现代网络环境中&#xff0c;爬虫已经成为获取信息的利器。然而&#xff0c;随着网站反爬措施的不断升级&#xff0c;单线程爬虫往往无法满足需求。多线程爬虫与代理IP的结合&#xff0c;不仅能提高效率&#xff0c;还能有效规避IP封禁问题。本文将详细探讨多线程爬虫接入代理…...

[网络][CISCO]Cisco-PIX配置详解

Cisco PIX防火墙配置指南 任何企业安全策略的一个主要部分都是实现和维护防火墙&#xff0c;因此防火墙在网络安全的实现当中扮演着重要的角色。防火墙通常位于企业网络的边缘&#xff0c;使内部网络与Internet之间或与其他外部网络互相隔离&#xff0c;并限制网络互访&#x…...

拒绝千篇一律,AI帮你定制独一无二的个人写真

每个女人都渴望展现最美的自己&#xff0c;你是否厌倦了拍出千篇一律的照片&#xff1f;今天&#xff0c;我要告诉你一个秘密&#xff0c;用简单三步&#xff0c;即可打造属于你的独一无二个人写真&#xff01;文生图、蒙版换脸、图生图&#xff0c;三步化身超级模特&#xff0…...

在云服务器上安装 RabbitMQ:从零到一的最佳实践

&#x1f6e0; 1. RabbitMQ 简介 RabbitMQ 是一个开源的消息代理中间件&#xff0c;广泛应用于高并发、异步任务队列的场景中。在分布式系统架构中&#xff0c;RabbitMQ 可以充当消息的中转站&#xff0c;帮助不同服务之间进行高效的消息通信。 在这篇文章中&#xff0c;我们…...

【nginx】搭配okhttp 配置反向代理

nginx的默认是一个反向代理。 nginx会默认把输入的请求,转向其他的服务器执行。 这些转向的服务器与客户端发起的服务器不是同一个。 客户端只认识nginx,不知道ngiix转向何方。 正向代理修改okhttp的proxy,实际上很多代理都是正向的。 反向代理修改请求路径到nginx。 感觉还…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...