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

OpenCV结构分析与形状描述符(24)检测两个旋转矩形之间是否相交的一个函数rotatedRectangleIntersection()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

测两个旋转矩形之间是否存在交集。
如果存在交集,则还返回交集区域的顶点。
下面是一些交集配置的例子。斜线图案表示交集区域,红色顶点是由函数返回的。
在这里插入图片描述

rotatedRectangleIntersection() 这个函数看起来像是用于检测两个旋转矩形之间是否相交的一个方法。在计算机图形学和游戏开发中,检测两个旋转矩形是否相交是一个常见的需求,尤其是在物理引擎或碰撞检测系统中。

函数原型

int cv::rotatedRectangleIntersection	
(const RotatedRect & 	rect1,const RotatedRect & 	rect2,OutputArray 	intersectingRegion 
)		

参数

  • 参数rect1 第一个矩形
  • 参数rect2 第二个矩形
  • 参数intersectingRegion 交集区域的顶点输出数组。最多返回8个顶点。存储为 std::vectorcv::Point2f 或者类型为 CV_32FC2 的 cv::Mat 作为 Mx1。

代码示例

在这个示例中:

  • 如果numVertices为0,表示没有交集。
  • 如果numVertices大于0,表示有交集,并且intersectingRegion中存储了交集区域的顶点。

#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>int main()
{// 创建两个旋转矩形实例cv::RotatedRect rect1( cv::Point2f( 100, 100 ), cv::Size2f( 50, 100 ), 30 );  // 中心点, 尺寸, 旋转角度cv::RotatedRect rect2( cv::Point2f( 120, 120 ), cv::Size2f( 100, 50 ), -20 );// 用于存储交集区域顶点的向量std::vector< cv::Point2f > intersectingRegion;// 调用函数检测两个旋转矩形是否相交int numVertices = cv::rotatedRectangleIntersection( rect1, rect2, intersectingRegion );// 检查返回值以确定交集情况if ( numVertices == 0 ){std::cout << "No intersection." << std::endl;}else if ( numVertices > 0 ){std::cout << "Intersection with " << numVertices << " vertices:" << std::endl;for ( const auto& pt : intersectingRegion ){std::cout << "Vertex: (" << pt.x << ", " << pt.y << ")" << std::endl;}}else{std::cout << "Error occurred during intersection calculation." << std::endl;}return 0;
}

运行结果

Intersection with 1 vertices:
Vertex: (136.054, 87.5523)
Vertex: (97.1611, 154.917)
Vertex: (95.9088, 155.373)
Vertex: (75.3445, 143.5)
Vertex: (64.4649, 113.609)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 性能诊断的方法(五):架构和业务诊断
  • 高教社杯数模竞赛特辑论文篇-2016年A题:基于极值优化的系泊系统设计
  • 消息中间件有哪些常见类型
  • Redis实现发布/订阅功能(实战篇)
  • 高度可定制的电竞鼠标,雷柏VT1 PRO MAX体验
  • docker拉取 jdk 8
  • 八股文知识汇总(常考)
  • 架构师备考的一些思考(四)
  • 【Hue导入Hive文件类型数据(自动建表)】
  • 网站如何防范BOT流量?
  • 【FATFS】f_mount函数详细解析
  • Python+Pytest框架,“api_key.py文件怎么编写“?
  • Ubuntu下beanstalkd无法绑定局域网IP地址以及消息队列beanstalkd上的error: JOB_TOO_BIG的解决
  • ZYNQ LWIP(RAW API) TCP函数学习
  • 每日OJ_牛客_点击消除(栈)
  • 【译】JS基础算法脚本:字符串结尾
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 2017前端实习生面试总结
  • CSS 三角实现
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JS实现简单的MVC模式开发小游戏
  • mysql外键的使用
  • spring security oauth2 password授权模式
  • vue--为什么data属性必须是一个函数
  • 解析带emoji和链接的聊天系统消息
  • 通过npm或yarn自动生成vue组件
  • 新书推荐|Windows黑客编程技术详解
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​secrets --- 生成管理密码的安全随机数​
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • ## 基础知识
  • #pragma 指令
  • #pragma预处理命令
  • #宝哥教你#查看jquery绑定的事件函数
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • ${ }的特别功能
  • (1)(1.11) SiK Radio v2(一)
  • (2)nginx 安装、启停
  • (c语言)strcpy函数用法
  • (pojstep1.3.1)1017(构造法模拟)
  • (Python第六天)文件处理
  • (八)Spring源码解析:Spring MVC
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (十八)Flink CEP 详解
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • ****Linux下Mysql的安装和配置
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 8.0 中有哪些新的变化?
  • .NET Core跨平台微服务学习资源
  • .NET Core中Emit的使用
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)