OpenCV Rect_< _Tp > 模版类详解及其成员函数用法示例

news2024/11/14 3:19:44

        OpenCV Rect_< _Tp > 模版类是一个2维矩形模板类,其英文全称为Rect_< _Tp > Class Template Reference,其公有成员函数有以下几个:

        其公有属性有:

        Rect_< _Tp > 模版类以左上角点tl,坐标_Tp x,Tp y及矩形宽度及矩形高度来描述一个矩形。有了矩形的基本属性,就可获得其他属性。如右下角点br(用两点构造一个矩形,默认这两个点是其对角点),矩形的size,矩形的面积等,也可判定一个点是否在矩形内。另外矩形还可以执行一下操作:

        rect = rect ± point;//将矩形移动一定的偏移量

        rect = rect ±s ize;//将矩形扩大或缩小一定量

        rect += point;

        rect -= point;

        rect += size;

        rect -= size ;

        rect = rect1 & rect2;//求矩形相交部分(即相互叠加部分)

        rect = rect1 | rect2;  //同时包含 rect1 和 rect2 的最小面积矩形

        rect &= rect1,;

        rect |= rect1;

        bool b1 = (rect1 == rect2); //比较判断

        bool b2 = (rect1 != rect2); //比较判断

        因C++的基本数据类型有:int,flot,double等,OpenCV中有定义相应的Rect,如下:

        typedef Rect_<int> cv::Rect2i

        typedef Rect2i ​​​​​​cv::Rect

        typedef Rect_<double> cv::Rect2d

        typedef Rect_<float> cv::Rect2f

        常用的Rect实际上是矩形模板类实例化int的类。

        示例程序

        下面新建一个控制台应用程序,来演示矩形创建及其他成员函数的用法。其代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    Rect rec[8];
    Point pts[3];
    pts[0].x = 30;
    pts[0].y = 30;
    pts[1].x = 230;
    pts[1].y = 130;
    pts[2].x = 80;
    pts[2].y = 80;

    rec[1] = Rect(pts[0], Size(150, 100));//test constructor and "= "operatror
    rec[2] = Rect(80,80, 150,80);         //test constructor and" = "operatror
    rec[3] = Rect(pts[2], pts[1]);        //ttest constructor and" = "operatror

    cout << "rec[1] width = " << rec[1].width << endl;
    cout << "rec[1] height = " << rec[1].height << endl;
    cout << "rec[1] area = " << rec[1].area() << endl;
    cout << "rec[1] top left corner: " << rec[1].tl() << endl;
    cout << "rec[1] bottom left corner: " << rec[1].br() << endl;

    if (rec[1].contains(pts[2])) //test contiains function
        cout << "rec[1] contins pts[2] " << endl;
    else
    {
        cout << "rec[1] does not contin pts[2] " << endl;

    }
    rec[4] = rec[1] & rec[2]; //test" &" operater
    if (rec[4].empty())
        cout << " There is not intersection between rec[1] and rec[2]" << endl;
    else
    {
        cout << "rec[4] width = " << rec[4].width << endl;
        cout << "rec[4] height = " << rec[4].height << endl;
        cout << "rec[4] area = " << rec[4].area() << endl;
        cout << "rec[4] top left corner: " << rec[4].tl() << endl;
        cout << "rec[4] bottom left corner: " << rec[4].br() << endl;
    }
    rec[5] = rec[1] | rec[2]; // test "|" operater
    if (rec[5].empty())
        cout << "rec[5] is empty" << endl;
    else
    {
        cout << "rec[5] width = " << rec[5].width << endl;
        cout << "rec[5] height = " << rec[5].height << endl;
        cout << "rec[5] area = " << rec[5].area() << endl;
        cout << "rec[5] top left corner: " << rec[5].tl() << endl;
        cout << "rec[5] bottom left corner: " << rec[5].br() << endl;
    }

    rec[6] = rec[1] + Size(100, 100);
    cout << "rec[6] width = " << rec[6].width << endl;
    cout << "rec[6] height = " << rec[6].height << endl;
    cout << "rec[6] area = " << rec[6].area() << endl;
    cout << "rec[6] top left corner: " << rec[6].tl() << endl;
    cout << "rec[6] bottom left corner: " << rec[6].br() << endl;

    rec[7] = rec[1] + Point(50,50);
    cout << "rec[7] width = " << rec[7].width << endl;
    cout << "rec[7] height = " << rec[7].height << endl;
    cout << "rec[7] area = " << rec[7].area() << endl;
    cout << "rec[7] top left corner: " << rec[7].tl() << endl;
    cout << "rec[7] bottom left corner: " << rec[7].br() << endl;

    waitKey(0);
}

本博文到此结束。

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

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

相关文章

2023年高教社杯国赛b题详细代码 文章 教学 2024数模国赛教学: 多波束测深技术问题分析与建模

本系列专栏将包括两大块内容 第一块赛前真题和模型教学,包括至少8次真题实战教学,每期教学专栏的最底部会提供完整的资料百度网盘包括:真题、数据、可复现代码以及文章. 第二块包括赛中思路、代码、文章的参考助攻, 会提供2024年高教社国赛各个赛题的全套参考内容(一般36h内更新…

matlab与VS混合编程以及错误解决

目录 前言&#xff1a; 1. matlab打包生成dll文件 打包方法一&#xff1a; 打包方法二&#xff1a; 2. VS端配置 3. 代码测试 4. 错误解决 a. 1.0x0000000000000000 处有未经处理的异常(在 Project1.exe 中): 0xC0000005: 执行位置 0x0000000000000000 时发生访问冲突。…

Unity游戏开发——Unity脚本组件:游戏开发的灵魂

Unity游戏开发 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发Unity脚本组件&#xff1a;游戏开发的灵魂前言1.Standard Assets导入报错解决办法2. 什么是Unity脚本组件&#xff1f;3. 创建和…

vue 精选评论词云 集成echarts-wordcloud TF-IDF算法

这一期在我们的系统里集成词云组件&#xff0c;开发的功能是景区精选评论的词云展示功能。 这个界面的逻辑是这样的&#xff1a; 在数据框里输入城市&#xff0c;可以是模糊搜索的&#xff0c;选择城市&#xff1b; 选择城市后&#xff0c;发往后台去查询该城市的精选评论&a…

python,json数据格式,pyecharts模块,pycharm中安装pyecharts

json数据格式 JSON是一种轻量级的数据交互格式 可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能&#xff1a; json就是一种在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互. 类似于&#xff1a; 国…

P39-数据存储2

编程题 编程题 编程题

2024 年顶级 Flutter UI 框架和库

根据 2022 年 StackOverflow 调查显示&#xff0c;Flutter 是最受欢迎的跨平台工具之一。自发布以来的 16 个月内&#xff0c;已有超过 200 万开发者采用了 Flutter。在本博客中&#xff0c;我们将浏览 GitHub 上可用的顶级 Flutter 存储库。除了每个存储库之外&#xff0c;还提…

MySQL 系统学习系列 - 事务、视图与存储过程的使用《MySQL系列篇-06》

数据库事务、视图、存储过程 事务 1. 事务简介 事务&#xff08;transaction&#xff09;是指访问并更新数据库中各种数据的一个程序执行单元&#xff08;unit&#xff09; [最小执行单元] MySQL事务主要用于处理操作量大。复杂度高的数据 1.MySQL数据库只有InnoDB引擎支持事…

App应用冷启动耗时排查

1 查看冷启动耗时 adb shell am start -S -W com.gerry.lifecycle/com.gerry.lifecycle.MainActivity发现冷启动耗时居然要6s多&#xff0c;下面开始排查 2 生成trace文件 // Application中开始trace记录 override fun attachBaseContext(base: Context?) {super.attachBas…

虚幻5|简单的设置角色受到伤害,远程攻击机关设置,制作UI,低血量UI

虚幻5|制作玩家血量&#xff0c;体力&#xff08;还未编辑&#xff0c;只用于引用&#xff09;-CSDN博客 需完成制作玩家血量及体力部分 一.给角色添加死亡动画 1.为了保证角色在播放死亡蒙太奇的时候&#xff0c;不会重新播放&#xff0c;而是保持原来倒地的姿势&#xff0…

Renesa Version Board开发RT-Thread 之WIFI创建Client

概述 本文主要介绍使用Renesa Version Board中WIFI功能&#xff0c;该模块基于RW007模块设计&#xff0c;RT-Thread软件架构已经实现该硬件相关的驱动接口。笔者基于该模块的相关接口在LWIP软件框架的基础上实现Client功能。实现数据的发送和接收。 1 WLAN 框架简介 参考文档…

【Java】—— Java面向对象基础:使用Java创建和打印员工对象信息

在Java中&#xff0c;类的定义和使用是面向对象编程的核心。本文将通过一个简单的例子来展示如何定义一个员工类&#xff08;Employee&#xff09;&#xff0c;并在测试类中创建员工对象&#xff0c;为这些对象的属性赋值&#xff0c;并打印出它们的信息。 定义员工类&#xff…

大模型微调

文章目录 前言一、使用的库二、数据预处理1.引入库2.读入数据3.对数据进行预处理4.转换为json格式文件 三&#xff0c;使用算子分析数据并进行数据处理四&#xff0c;划分训练集和测试集五&#xff0c;编写训练脚本开始训练六&#xff0c;进行模型推理人工评估总结 前言 这是使…

网络优化|单源最短路|Dijkstra|Floyd|Matlab

图和网络可以用来描述集合元素和元素之间关系。大量的最优化问题都可以抽象为网络模型加以解释&#xff0c;描述和求解。 图与网络模型在建模时具有直观、易理解、适应性强等&#xff0c;广泛应用在管理科学、物理学、化学、计算机科学、信息论、控制论、社会科学以及军事科学等…

C# 循环访问目录树详解与示例

文章目录 一、目录树遍历的概念二、使用System.IO命名空间三、DirectoryInfo和FileInfo类四、递归遍历目录树五、示例&#xff1a;列出目录树中的所有文件和文件夹六、异常处理七、迭代方法八、总结 在C#中&#xff0c;访问文件系统是常见的需求之一。有时我们需要遍历目录树以…

嵌入式开发技术进步带来新机遇

嵌入式开发作为信息技术领域的重要分支&#xff0c;随着科技的不断进步&#xff0c;正迎来新的机遇。本文将从人工智能、物联网、边缘计算等方面探讨嵌入式开发技术的进步如何带来新的发展机遇&#xff0c;并展望未来的发展趋势。 一、引言 嵌入式系统是一种特殊的计算机系统&…

unreal engine5中character角色和怪物交互时发生穿模

UE5系列文章目录 文章目录 UE5系列文章目录前言一、原因定位二、解决方法 前言 在 Unreal Engine 5 中&#xff0c;角色“穿模”通常指的是角色模型与其他物体&#xff08;如墙壁、地面或其他对象&#xff09;发生不正确的穿透或重叠现象。这可能是由多种原因造成的&#xff0…

C++ | Leetcode C++题解之第372题超级次方

题目&#xff1a; 题解&#xff1a; class Solution {const int MOD 1337;int pow(int x, int n) {int res 1;while (n) {if (n % 2) {res (long) res * x % MOD;}x (long) x * x % MOD;n / 2;}return res;}public:int superPow(int a, vector<int> &b) {int an…

C# 泛型类型的约束详解与示例

文章目录 一、泛型约束概述二、泛型约束详解与示例1. 类约束2. 接口约束3. 引用类型约束4. 值类型约束5. 无参数构造函数约束6、多重约束7、默认构造函数约束8、基类和接口的组合约束 三、总结 在C#编程语言中&#xff0c;泛型是一种非常强大的特性&#xff0c;它允许我们编写可…

NetSuite 2024.2 学习笔记

NetSuite一年两次的发版&#xff0c;每次都会带来一些新的东西。这对于顾问来说&#xff0c;应该成为必修课。 每个版本发版内容的学习时长&#xff0c;大约在20小时左右。包括&#xff1a; •Release Notes通读 •Release Preview环境申请 •热点功能验证 •New Release学习笔…