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

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

  • 操作系统: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.lryc.cn/news/435863.html

相关文章:

  • [SWPU2019]Web1 超详细教程
  • 【区块链通用服务平台及组件】基于向量数据库与 LLM 的智能合约 Copilot
  • mfc140u.dll丢失有啥方法能够进行修复?分享几种mfc140u.dll丢失的解决办法
  • 【PyQt6 应用程序】在用户登录界面实现密码密文保存复用
  • 赋能百业:多模态处理技术与大模型架构下的AI解决方案落地实践
  • 游戏论坛网站|基于Springboot+vue的游戏论坛网站系统游戏分享网站(源码+数据库+文档)
  • 【go】pprof 性能分析
  • Python | Leetcode Python题解之第397题整数替换
  • JDBC使用
  • 633. 平方数之和-LeetCode(C++)
  • Linux shell编程学习笔记79:cpio命令——文件和目录归档工具(下)
  • 《 C++ 修炼全景指南:七 》优先级队列在行动:解密 C++ priority_queue 的实现与应用
  • 通信工程学习:什么是HSS归属用户服务器
  • mysql workbench 如何访问远程数据库
  • ICMAN触摸感应芯片方案
  • 面向个小微型企业的开源大模型(Qwen2等)商业化, AI部署成本分析与优化策略(费用分析、资源消耗分析)
  • pandas判断一列中存在nan值
  • 如何将 Electron 项目上架 Apple Store
  • R语言统计分析——功效分析2(t检验,ANOVA)
  • android 侧滑返回上一界面备忘
  • golang学习笔记18——golang 访问 mysql 数据库全解析
  • 苹果账号登录后端验证两种方式 python2
  • FlinkCDC 3.2.0 新增优点 Pattern Replacement in routing rules
  • 《 C++ 修炼全景指南:六 》深入探索 C++ 标准库中的 stack 与 queue 容器适配器
  • 高级java每日一道面试题-2024年9月07日-JVM篇-说一下类加载的执行过程?
  • 笔试强训day09
  • 软件测试中的黑盒测试方法,包括其定义、目的及主要步骤。
  • Shell脚本计算π的近似值
  • 进程间通信之消息队列
  • 人生苦短我用Python 5-xlwings自动调整表格