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

devtools/2025/1/15 21:57:57/

        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 "= "operatrorrec[2] = Rect(80,80, 150,80);         //test constructor and" = "operatrorrec[3] = Rect(pts[2], pts[1]);        //ttest constructor and" = "operatrorcout << "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 functioncout << "rec[1] contins pts[2] " << endl;else{cout << "rec[1] does not contin pts[2] " << endl;}rec[4] = rec[1] & rec[2]; //test" &" operaterif (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 "|" operaterif (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.ppmy.cn/devtools/100303.html

相关文章

matlab计算对比两个点云的高程差

通常需要计算两个点云的高程差值 代码如下 假设 pointCloud1 和 pointCloud2 是两个点云数据的矩阵 % 每行代表一个点&#xff0c;列分别是 x, y, z 坐标 % 对齐点云 [tform,~,pointCloud1Reg] pcregistericp(pointCloud1, pointCloud2); % 计算重叠区域 % 假设通过一定的距…

微软在Edge浏览器中引入本地AI模型;苹果将于9月10日发布iPhone 16系列

&#x1f989; AI新闻 &#x1f680; 微软在Edge浏览器中引入本地AI模型 摘要&#xff1a;微软正在探索在Microsoft Edge浏览器中引入名为Phi3 Mini的本地AI模型&#xff0c;旨在提升用户交互体验。最新的Canary版Edge浏览器中出现了“Prompt API for Phi3 Mini”的实验性选项…

关于前端布局的基础知识

float 横向布局 float 实现横向布局&#xff0c;需要向横着布局的元素添加float 其值left right 存在问题 如果使用float 所在父级五高度&#xff0c;会导致下方的元素上移 top的高度被吞了 解决方法&#xff1a; 给父级元素设置高度&#xff1a;不推荐&#xff0c;需要给父级…

AutoGPT开源项目解读

AutoGPT开源项目解读 (qq.com) AutoGPT旨在创建一个自动化的自我改进系统&#xff0c;能够自主执行和学习各种任务 项目基本信息 首先阅读项目的README.md&#xff0c;下述代理和智能体两个名词可互换 项目简介&#xff1a;一个创建和运行智能体的工具&#xff0c;这些智能体…

pytorch深度学习基础 8 (使用PyTorch的内置功能和默认参数来构建和训练一个简单的线性模型)

co 上面几节都是自定义了很多东西&#xff0c;比如模型的权重&#xff0c;偏置的大小&#xff0c;学习率&#xff0c;损失函数等等&#xff0c;但是实际上pytorch有很多内置的函数以及默认的参数可以对我们的模型部分进行替换&#xff0c;效果也是非常好的&#xff0c;今天我们…

献给正在挣扎中的技术人!

见字如面&#xff0c;技术人雄起&#xff01; 时代的滚轮在我们互联网技术人的身上留下了深深的烙印&#xff0c;就在前几年还能感受到身边互联网创造富豪的声音&#xff0c;如今生在这个行业的人却在为自己的饭碗能不能保得住而内卷&#xff0c;而担心。 其实我也和很多小伙伴…

数据结构-串-了解串-串的基本操作

一、了解串 串的定义 串&#xff08;String&#xff09;是由零个或多个字符组成的有限序列。串在计算机科学中是一个非常重要的概念&#xff0c;通常用于表示文本数据。根据字符的编码方式&#xff0c;串可以由 ASCII、Unicode 等编码格式表示。串的基本特性包括&#xff1a;…

什么是Redis大key问题?如何解决?

目录 Key多大算大呢&#xff1f; 识别big key 处理big key Big Key是Redis中存储了大量的数据的Key&#xff0c;不要误以为big key只是表示Key的值很大&#xff0c;他还包括这个Key对应的value占用空间很多的情况&#xff0c;通常在String、list、hash、set、zset等类型中出…