OpenCV GUI常用函数详解

news2024/12/24 20:40:31

在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 getWindowImageRect
    cout << 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 destroyWindow

    namedWindow("Src", WINDOW_NORMAL);  //demo namedWindow()
    setWindowProperty("Src", WND_PROP_FULLSCREEN,WINDOW_FULLSCREEN);//demosetWindowProperty
    dbData = 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 selectRoI
            roi = (*pimg)(rec);
            moveWindow("Src", x, y); //demo mmove
            break;
        case EVENT_MOUSEWHEEL:
            int mouseDelta = getMouseWheelDelta(flags); //demo getMouseWheelDelta
            mouseDelta /= 12;
            rec = getWindowImageRect("Src");  //demo getWindowImageRect
            resizeWindow("Src", Size(rec.width + mouseDelta, rec.height + mouseDelta)); //demo resizeWindow
            break;
    }
    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 getWindowImageRect
    cout << 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 destroyWindow

    namedWindow("Src", WINDOW_NORMAL);  //test namedWindow()
    setWindowProperty("Src", WND_PROP_FULLSCREEN, WINDOW_FULLSCREEN); //test setWindowProperty
    dbData = getWindowProperty("Src", WND_PROP_AUTOSIZE);     //test getWindowProperty()
    cout << dbData << endl;
    imshow("Src", src1);
   */

    //demo mosue function
    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()

    setMouseCallback("Src", onMouse, &src1); //demo setMouseCallback
    
    waitKey(0);                          //test waitKey()
    return 0;
}

试运行,结果如下:

 在右眼位置,点击鼠标,结果如下:

依据提示,选择ROI,

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

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

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

向前滚动滚轮结果如下:

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

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

试运行,结果如下:

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

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

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

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

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

通过Trackbar实现了显示图片的切换。本示例程序就演示到这里,示例代码已上传到CSDN,下载链接为:https://download.csdn.net/download/billliu66/89754230

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2135611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt使用对数坐标的例子,qchart用QLogValueAxis坐标不出图解决

硬件&#xff1a;ThinkPad T15 系统&#xff1a;win10 专业版 qt版本&#xff1a;Qt 5.14.1 &#xff0c; QtCreator 4.11.1 软件界面放了一个QPushButton&#xff0c;一个QVBoxLayout&#xff0c;如下&#xff1a; 主要代码如下&#xff0c;我添加了两条曲线&#xff0c;…

Spring扩展点系列-SmartInstantiationAwareBeanPostProcessor

文章目录 简介源码分析示例 简介 spring容器中Bean的生命周期内所有可扩展的点的调用顺序 扩展接口 实现接口ApplicationContextlnitializer initialize AbstractApplicationContext refreshe BeanDefinitionRegistryPostProcessor postProcessBeanDefinitionRegistry B…

Python基础学习(1)

目录 一&#xff0c;表达式和变量 1&#xff0c;表达式 2&#xff0c;变量 二&#xff0c;类型 1&#xff0c;前言 2&#xff0c;动态性特征 一个技巧让python变量类型更加明确 3&#xff0c;变量的类型 1&#xff0c;整型 2&#xff0c;float 3&#xff0c;布尔型 4&…

border制作渐变色边框

border也可以做出渐变色效果 .themeConfig {width: 250px;height: 117px;border: 1.5px solid transparent !important;border-radius: 8px !important;background-clip: padding-box, border-box;background-origin: padding-box, border-box;background-image: linear-gradi…

linux第一课(操作系统核心)

一.关于linux (1)linux是一款开源的操作系统(是多用户&#xff0c;多任务&#xff0c;多线程)。 (2)一般所说的linux指的是linux核心&#xff0c;即对计算机硬件资源负责调度管理&#xff0c;主要职责是进程管理&#xff0c;内存管理文件系统&#xff0c;设备驱动&#xff0c…

轧钢测径仪对热轧产线实现温度系数自动修正!

钢材在轧制过程中&#xff0c;需要检测外径时&#xff0c;很多都处于高温状态&#xff0c;甚至是1000℃以上&#xff0c;这对轧钢测径仪是个巨大的考验&#xff0c;但测径仪在解决高温、水雾、氧化铁皮、震动等对测量影响的同时&#xff0c;还要考虑钢材热态下的膨胀造成的测量…

揭秘同态加密 (HE):你需要知道什么?

鉴于苹果公司发布了重要的 Swift 同态加密公告&#xff0c;Zama 高级软件工程师 Agns Leroy 详细解释了 HE 是什么、不同的方案及其功能&#xff0c;以及它在未来可能的用途。 7 月底&#xff0c;苹果隐私保护技术团队宣布了一项令人兴奋的新成果&#xff1a;‘swift-homomorp…

什么是WSL?

WSL&#xff08;Windows Subsystem for Linux&#xff09;是一个为在 Windows 10 和 Windows 11 上能够原生运行 Linux 二进制可执行文件的兼容层。 主要特点和功能包括&#xff1a; 一、运行 Linux 环境 允许用户在 Windows 系统上直接运行 Linux 命令行工具、脚本和应用程…

springboot系列--自动配置原理

一、容器功能 一、组件添加功能 一、Configuration Configuration有两种模式&#xff0c;Full模式与Lite模式。 1、配置 类组件之间无依赖关系用Lite模式加速容器启动过程&#xff0c;减少判断 2、配置类组件之间有依赖关系&#xff0c;方法会被调用得到之前单实例组件&#…

linux 操作系统下cupsdisable命令介绍和使用案例

linux 操作系统下cupsdisable命令介绍和使用案例 cupsdisable 命令是 Linux 操作系统中用于禁用 CUPS&#xff08;通用打印服务&#xff09;打印机的命令。它允许用户将指定的打印机设置为不可用状态&#xff0c;从而阻止任何新的打印作业被发送到该打印机 cupsdisable 命令概…

句子成分——每日一划(七)

目录 一、原句 二、第一部分 三、第二部分 一、原句 Such a state of affairs can only produce antagonism between the laboring class and the owning, i.e., do-nothing, class. The fight breaks out and hatred delivers its blows. 来源&#xff1a;Why I Was a Bur…

C++11第四弹:包装器

&#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系列 &#x1f308;Linux学习专栏&#xff1a; 南桥谈Linux &#x1f308;数据结构学习专栏&#xff1a; 数据结构杂谈 &#x1f308;数据…

探索UWB技术的独特优势:实现高精度定位

UWB定位技术是一种利用无线信号进行精确位置定位的技术&#xff0c;它利用超宽带无线电信号通过测量信号的到达时间、相位差和信号能量等参数来确定物体的精确位置。 UWB定位技术具有多种优势&#xff0c;首先&#xff0c;它具有较高的定位精度&#xff0c;可实现毫米级的精确…

如何防止ZIP压缩文件被随意打开?

ZIP文件是常见的压缩文件格式&#xff0c;为了保护压缩包不被随意打开&#xff0c;很多人还会给ZIP压缩包设置密码&#xff0c;用于保护文件的数据安全&#xff0c;以下是一篇关于如何防止ZIP压缩文件被随意打开的详细探讨。 引言 ZIP文件因其高效的压缩率和广泛的兼容性&…

目标检测中的解耦和耦合、anchor-free和anchor-base

解耦和耦合 写在前面 在目标检测中&#xff0c;objectness&#xff08;或 objectness score&#xff09;指的是一个评分&#xff0c;用来表示某个预测框&#xff08;bounding box&#xff09;中是否包含一个目标物体。 具体来说&#xff0c;YOLO等目标检测算法需要在每个候选区…

基于OpenSSL的密码管理系统-应用密码学课程报告

第1章 概要设计 1.1 设计目的 本研究旨在设计并实现一个基于OpenSSL的密码管理系统&#xff0c;该系统具备密钥对的生成、密钥上传、密钥的核对、身份认证、文件与邮件的加密和解密、数字签名及数字证书管理等常用功能。研究的意义主要体现在以下几个方面&#xff1a; 提升网…

Ubuntu20-xrdp与Windows-mstsc远程桌面连接

ubuntu端 sudo adduser yu //输入密码和确认密码&#xff0c;后面一路回车&#xff0c;新建用户yu&#xff0c;确保用户没有被登录 sudo apt install xrdp //安装xrdp sudo systemctl status xrdp //查看xrdp服务状态 sudo adduser xrdp ssl-cert //将用户 xrdp 添加到 ss…

悟空crm客户管理系统二次开发 单独新增表格字段

1&#xff0c;仪表盘&#xff08;数据来源修改&#xff09; 注意点&#xff1a;有层级关系&#xff0c;管理员账号可以看到全部数据&#xff0c;主管只能看到下属数据。 2、在客户管理菜单里面 增加一个时间筛选、额度汇总 /*** 获取客户列表** param $type* param $content*…

在线API文档,技术文档工具源码ShowDoc

ShowDoc是一个非常适合IT团队的在线API文档、技术文档工具。通过showdoc&#xff0c;你可以方便地使用markdown语法来书写出美观的API文档、数据字典文档、技术文档、在线excel文档等等。 代码下载

单机docker-compose部署minio

单机多副本docker-compose部署minio 简单介绍 如果服务器有限可以单机挂载多硬盘实现多副本容错&#xff08;生产不推荐&#xff09; 部署好的文件状态 有两个重要文件 docker-compose.yaml和nginx.conf docker-compose.yaml是docker部署容器的配置信息包括4个minio和1个ng…