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

news2024/12/24 8:10:09
  • 操作系统: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.coloradmin.cn/o/2127904.html

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

相关文章

arm64-v8a 和 armeabi-v7a、armeabi 有什么区别

有时下载软件包有好几种选择&#xff0c;包括 arm64-v8a、armeabi-v7a、armeabi、x86_64 等。如果不清楚它们的含义&#xff0c;随便选择下载可能导致软件不能安装。以下是相关知识介绍。 从这些命名大概可以猜出它与 32 位或 64 位软件有关&#xff0c;部分确实可以这样理解&…

Java 每日一刊(第4期):Java 23 即将发布

文章目录 前言Java 23 即将发布&#xff0c;迎接新的功能时代JDK 24 的早期访问版本&#xff1a;Project Loom 的进展JConf.dev 大会&#xff1a;Java 社区的重要盛会本期小知识 创新不是逻辑思维的产物&#xff0c;而是富有远见的心灵创造。 前言 这里是分享 Java 相关内容的…

SprinBoot+Vue山西文旅网的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

使用智能机器人外呼,助力升级企业客户联络

现如今企业与客户之间的沟通方式正在经历着深刻的变革&#xff0c;智能机器人外呼技术以其高效、精准、成本低等优势&#xff0c;逐渐成为企业进行客户联系和市场推广的重要工具。本文将详细探讨智能机器人外呼的定义、应用及其对企业的重大影响&#xff0c;以及如何通过这一技…

稀土紫外屏蔽剂:防晒护肤品

稀土紫外屏蔽剂在防晒护肤用品领域的应用越来越受到关注。稀土紫外屏蔽剂主要利用稀土元素的特殊光学特性来阻挡或吸收紫外线&#xff0c;从而保护皮肤免受紫外线伤害。以下是稀土紫外屏蔽剂在防晒护肤用品中的主要优势和作用&#xff1a; 高效紫外线吸收&#xff1a;稀土元素如…

TDengine 首席架构师肖波演讲整理:探索新型电力系统的五大关键场景与挑战

在 7 月 26 日的 TDengine 用户大会上&#xff0c;涛思数据&#xff08;TDengine&#xff09;首席架构师肖波进行了题为《TDengine 助力新型电力系统高质量发展》的主题演讲。他不仅分享了 TDengine 在新型电力系统中的应用案例&#xff0c;还深入探讨了如何利用 TDengine 的高…

SprinBoot+Vue便民医疗服务微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

前端面试记录

第一家&#xff08;架构项目&#xff09;&#xff1a; 1.vueRouter原理 2.单页面spa与多页面mpa区别 3.hash和history区别 4.webpack打包流程 5.npm安装依赖过程 6.热更新原理 第二家(机试项目)&#xff1a; 1&#xff0e;组件继承原组件方法 a t t r s , attrs, attrs,lis…

828华为云征文 | 云服务器Flexus X实例,搭建个人博客网站WordPress

828华为云征文 | 云服务器Flexus X实例&#xff0c;搭建个人博客网站WordPress 1、购买华为云 Flexus X 实例 Flexus云服务器X实例-华为云 (huaweicloud.com) 2、登录宝塔面板-下载软件并配置对应版本 Nginx 1.24.0MySQL 5.7.44PHP 5.6.40Pure Ftpd 1.0.49phpMyAdmin 4.9 3、软…

UE5源码Windows编译、运行

官方文档 Welcome To Unreal Engine 5 Early Access Learn what to expect from the UE5 Early Access program. 链接如下&#xff1a;https://docs.unrealengine.com/5.0/en-US/Welcome/#gettingue5earlyaccessfromgithub Step 0&#xff1a;找到UE5源码 直接先上链接 https…

【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现 本文将详细介绍如何使用容器适…

网络安全(sql注入,初步认识)

这里写目录标题 一. information_schema.tables 和 information_schema.schemata是information_schema数据库中的两张表1. information_schema.schemata2. information_schema.tables 二. 判断注入类型1. 判断数字型还是字符型注入2. 判断注入闭合是""还是 三. 判断表…

Java Jdbc 链接db2数据库示例

pom.xml 各版本 <dependency><groupId>com.ibm.db2</groupId><artifactId>jcc</artifactId><version>11.5.9.0</version> </dependency>java 示例 package com.iRain93.test;import java.sql.Connection; import java.sql.Dr…

JAVAJDBC连接ORACLE数据库

1.选择的驱动版本&#xff08;jdk1.8oracle11G&#xff09; 2.获取驱动到本地 3.将驱动配置到maven 如果配置了环境变量命令操作符执行即可。 未配置环境变量需要在maven的bin目录下 mvn install:install-file -DgroupIdcom.oracle -DartifactIdojdbc8 -Dversion12.2.0.1 -D…

【人工智能学习笔记】4_1 深度学习基础之深度学习概述

深度学习概述 深度学习(Deep Learning, DL) 是机器学习的分支是一种以人工神经网络为架构,对资料进行表征的学习的算法表征学习(特征学习) :将原始数据转换成为能够被机器学习有效开发的一种技术的集合优缺点 优点 学习能力强覆盖范围广、适应性好数据驱动、上限高可移…

python-古籍翻译

题目描述 小理跑到外星人的图书馆去读书。有一本外星古籍&#xff0c;里面的内容是用八进制写成的&#xff1b;但小理只能处理十六进制的数据。请你帮忙写一个翻译软件&#xff0c;帮小理把八进制串翻译成十六进制串。 输入 仅一行&#xff0c;一个八进制字符串 s&#xff0…

Mac笔记本上查看/user/目录下的文件的几种方法

在Mac笔记本上查看/user/下的文件&#xff0c;可以通过多种方法实现。以下是一些常见的方法&#xff1a; 一、使用Finder 打开Finder&#xff1a;点击Dock栏中的Finder图标&#xff0c;或者使用快捷键Command F。 导航到用户目录&#xff1a; 在Finder的菜单栏中&#xff0…

下一代RAG:MemoRAG

MemoRAG是一个建立在高效、超长记忆模型之上的创新 RAG&#xff08;Retrieval-Augmented Generation&#xff09;框架&#xff0c;由智源研究院&#xff08;北京人工智能研究院&#xff09;与中国人民大学高瓴人工智能学院联合推出并开源。 MemoRAG&#xff1a;通过记忆启发的…

计算机视觉的应用33-基于双向LSTM和注意力机制融合模型的车辆轨迹预测应用实战

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用33-基于双向LSTM和注意力机制融合模型的车辆轨迹预测应用实战。在当今复杂的数据处理场景中&#xff0c;尤其是面对时间序列或序列数据时&#xff0c;双向 LSTM结合注意力机制的模型因其强大的序列…

普通人,适合转行大模型吗?大模型的未来前景怎么样?

前言 在当今时代&#xff0c;AI大模型的发展如火如荼&#xff0c;其在各行各业的应用日益广泛。那么&#xff0c;作为普通人&#xff0c;我们是否应该转行投身于大模型领域呢&#xff1f;本文将从以下几个方面阐述&#xff0c;为什么普通人应该转行大模型&#xff0c;以及大模…