OpenCV结构分析与形状描述符(19)查找二维点集的最小面积外接旋转矩形函数minAreaRect()的使用

news/2024/9/18 12:38:54/ 标签: opencv, 人工智能, 计算机视觉
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

找到一个包围输入的二维点集的最小面积旋转矩形。

该函数计算并返回指定点集的最小面积边界矩形(可能是旋转的)。开发者需要注意的是,当数据接近包含的 Mat 元素边界时,返回的 RotatedRect 可能会包含负索引。

minAreaRect 是 OpenCV 库中的一个函数,它用于查找一个给定的二维点集(通常是一个轮廓)的最小面积外接旋转矩形。这个矩形不同于标准的最小包围盒(即由 cv::boundingRect 得到的直立矩形),它可以旋转任意角度以适应轮廓的形状,从而达到最小面积的效果。
使用场景
minAreaRect 常用于物体识别与定位,特别是在需要处理旋转情况下的物体检测时。它可以帮助你找到一个物体的精确位置和方向,这对于机器人视觉、工业检测等领域特别有用。

函数原型

RotatedRect cv::minAreaRect	
(InputArray 	points
)	

参数

  • 参数points 输入的二维点向量,存储在 std::vector<> 或 Mat 中。

返回值

  • RotatedRect: 返回的是一个 RotatedRect 对象,它包含了最小外接矩形的信息。RotatedRect 包括三个属性:
    • center (矩形的中心点坐标)
    • size (矩形的宽度和高度)
    • angle (矩形的旋转角度)

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>using namespace cv;
int main()
{// 创建一个空白图像Mat img( 400, 400, CV_8UC3, Scalar( 255, 255, 255 ) );std::vector< cv::Point2f > points;points.push_back( Point2f( 100, 100 ) );points.push_back( Point2f( 125, 125 ) );points.push_back( Point2f( 75, 125 ) );points.push_back( Point2f( 50, 150 ) );points.push_back( Point2f( 150, 150 ) );points.push_back( Point2f( 200, 250 ) );points.push_back( Point2f( 100, 250 ) );points.push_back( Point2f( 150, 300 ) );points.push_back( Point2f( 125, 275 ) );points.push_back( Point2f( 175, 275 ) );// 绘制原始点for ( const auto& pt : points ){circle( img, pt, 5, Scalar( 0, 255, 0 ), -1 );}// 获取最小面积外接矩形cv::RotatedRect rect = cv::minAreaRect( points );// 绘制最小面积外接矩形cv::Point2f vertices[ 4 ];rect.points( vertices );for ( int i = 0; i < 4; ++i ){cv::line( img, vertices[ i ], vertices[ ( i + 1 ) % 4 ], cv::Scalar( 0, 255, 0 ), 2 );}// 显示图像cv::imshow( "Image with Min Area Rect", img );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述


http://www.ppmy.cn/news/1524304.html

相关文章

Python习题 177:设计银行账户类并实现存取款功能

(编码题)Python 实现一个简单的银行账户类 BankAccount,包含初始化方法、存款、取款、获取余额等功能。 参考答案 分析需求如下。 Python 类 BankAccount,用于模拟银行账户的基本功能。该类应包含以下方法: 初始化方法: 接受两个参数:account_holder(账户持有人的姓…

振动传感器的原理

振动传感器的原理是基于对物体振动信号的感知和检测&#xff0c;将其转化为电信号输出。以下是振动传感器原理的详细解释&#xff1a; 基本原理 振动传感器的工作原理主要基于物理学的振动理论和转换机制。当被测物体发生振动时&#xff0c;传感器内部的敏感元件会捕捉到这种振…

CentOS 7 安装yum使用报错:Cannot find a valid baseurl for repo: base/7/x86_6

当进入新的或者旧的centos系统使用yum install 安装相关包时最后报错显示如下: Cannot find a valid baseurl for repo: base/7/x86_6 这时很可能是官方源无法访问或者已经下线&#xff0c;这时就需要我们切换centos-vault源&#xff0c;阿里云官方为我们提供了对应CentOS需要的…

QT中使用UTF-8编码

在Qt中&#xff0c;确保应用程序使用UTF-8编码是非常重要的&#xff0c;尤其是在处理国际化和多语言文本时。以下是一些确保在Qt应用程序中使用UTF-8编码的方法&#xff1a; ### 1. 设置全局默认编码 在应用程序启动时&#xff0c;可以设置全局默认编码为UTF-8。这可以通过调…

c++优先级队列的迭代器区间构造函数

如上就是迭代器区间构造函数的模拟实现。所以说&#xff0c;构造函数也可以是模板函数&#xff0c;传入的是对应的容器的迭代器&#xff0c;使用这个迭代器区间对优先级队列中的容器进行初始化&#xff0c;然后进行向下调整建堆。 而且建堆是从最后一棵子树开始向上进行的&…

漫谈设计模式 [5]:建造者模式

引导性开场 菜鸟&#xff1a;老鸟&#xff0c;我最近在写一个项目&#xff0c;发现很多对象初始化的代码特别复杂&#xff0c;感觉乱糟糟的。有没有什么好的方法能帮我简化这些代码&#xff1f; 老鸟&#xff1a;嗯&#xff0c;你提到的这个问题其实很常见。你有没有听说过设…

爬虫4:bs4

对于re来说&#xff0c;公式就是 . ∗ ? .*? .∗?贪婪搜索第一次匹配成功就返回&#xff0c;.*则返回所有成功匹配的 北京新发地尝试 那么对于bs4来说公式就是BeautifulSoup(“html源码”, “html.parser”) import requests from bs4 import BeautifulSoup# url http://…

【OJ】关于顺序表的经典题目(移除数组中指定元素的值、数组去重、合并两个有序的数组)

文章目录 前言题目1&#xff1a;移除数组中指定的元素题目描述解题思路方法1 &#xff1a;暴力法方法2&#xff1a;双指针法 题目2&#xff1a;数组去重题目描述解题思路双指针法 题目3&#xff1a;合并两个有序的数组题目描述解题思路方法1&#xff1a;暴力破解法方法2&#x…

多源BFS之矩阵距离

多源BFS 173. 矩阵距离 给定一个 N行 M列的 01矩阵 A&#xff0c;A[i][j]与 A[k][l]之间的曼哈顿距离定义为dist(i,j,k,l)|i−k||j−l| 输出一个 N行 M列的整数矩阵 B&#xff0c;其中&#xff1a; B[i][j]min1≤x≤N,1≤y≤M,A[x][y]1dist(i,j,x,y) 输入格式 第一行两个整数…

状压DP

状压DP 对于数据范围n<20的可以考虑状压DP 1.蒙德里安的梦想 题目描述 求把 N M NM NM 的棋盘分割成若干个 12 的的长方形&#xff0c;有多少种方案。 例如当$ N2&#xff0c;M4$ 时&#xff0c;共有 5 种方案。当 N 2 &#xff0c; M 3 N2&#xff0c;M3 N2&…

echarts 显示中国地图以及省份

这里使用echarts 4.9的版本显示中国地图&#xff0c;因为5.X的版本已经把地图模块分离出去了 可以从这里下载全国地图数据或各身份的数据 https://github.com/apache/echarts/tree/master/test/data/map 完整代码示例&#xff1a;中国地图 <!DOCTYPE html> <html&g…

全国各地身份证号开头6位数字及地区对照表

具体请前往&#xff1a;全国各地身份证号开头6位数字-省市县/区对照表

设计模式】Listener模式和Visitor模式的区别

文章目录 前言一、介绍Listener模式Visitor模式 二、代码实现2.1 Listener模式的Java实现2.2Listener模式的Go实现2.3Visitor模式的Java实现2.4Visitor模式的Go实现 三、总结 前言 在软件设计中&#xff0c;设计模式是解决特定问题的通用解决方案。Listener模式和Visitor模式是…

STL-stack/queue/deque(容器适配器)

目录 ​编辑 STL-stack 150. 逆波兰表达式求值 stack queue std::stack deque 性能测试 结构 STL-stack 栈的压入、弹出序列_牛客题霸_牛客网输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否可能为该栈的弹出顺序。假。题目…

信息安全国内外现状及技术要求示例(R155/R156)

国际政策、 法规的现状与趋势 鉴于对交通安全、社会安全甚至国家安全的重要影响&#xff0c;汽车网络安全、数据安全得到各相关国家和地区的高度重视&#xff0c;纷纷出台相关法规、标准。 信息安全法规 R155 法规适用范围覆盖了乘用车及商用车&#xff0c;适用于 M 类、N 类…

原生 input 中的 “type=file“ 上传文件

目标&#xff1a;实现文件上传功能 原型图&#xff1a; HTML部分&#xff1a; <div class"invoice-item"><div class"invoice-title">增值税专用发票</div><div class"invoice-box"><el-form-item label"标准…

C语言数组指针--自学笔记

一维数组指针 int a[3] {1,2,3}; int *pa a; //pa是一个整形的指针&#xff0c;pa 指针跨一个int大小的地址 int (*paa)[3] a; //paa是一个数组行指针, paa指针跨一行&#xff0c;3个int大小的地址 //a[n] *(pan) 二维数组指针 int b[2…

【H2O2|全栈】关于CSS(2)CSS基础(二)

目录 CSS基础知识 前言 准备工作 选择器的组合 盒模型 示例网页代码 后代选择器 亲代选择器 相邻兄弟选择器 后续兄弟选择器 多个元素选择器 通配符选择器 优先级 其他应用 伪类 锚链接的属性 列表的属性 list-style-type list-style-position list-style…

coding云原生构建实现自动化部署(前端代码v3+vite)

使用Coding CI/CD 在现代软件开发中&#xff0c;自动化部署是提高效率和降低出错率的关键步骤。本文将详细介绍如何使用 coding-ci.yml 文件配置 CI/CD 流程&#xff0c;实现一个自动化的部署过程。我们将以一个简单的项目为例&#xff0c;讲解如何利用 Coding CI/CD 工具自动…

EMQX 学习一二:认证和授权、主题重写、webhook

建议: 有问题找 官方文档 官方文档 官方AI EMQX : MQTT broker 安装: 启动: * cd 到 安装目录的bin目录下 * ./emqx start (守护进程启动)[root@localhost bin]# ./emqx start WARNING: Default (insecure) Erlang cookie is in use. WARNING: Configure node.cookie i…