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

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

算法描述

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

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

minAreaRect 是 OpenCV 库中的一个函数,它用于查找一个给定的二维点集(通常是一个轮廓)的最小面积外接旋转矩形。这个矩形不同于标准的最小包围盒(即由 cv::boundingRect 得到的直立矩形),它可以旋转任意角度以适应轮廓的形状,从而达到最小面积的效果。
使用场景

minAreaRect 常用于物体识别与定位,特别是在需要处理旋转情况下的物体检测时。它可以帮助你找到一个物体的精确位置和方向,这对于机器人视觉、工业检测等领域特别有用。

函数原型

cpp 复制代码
RotatedRect cv::minAreaRect	
(
	InputArray 	points
)	

参数

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

返回值

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

代码示例

cpp 复制代码
#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;
}

运行结果

相关推荐
七牛云行业应用24 分钟前
Cursor 如何接入自定义模型:Override Base URL 完整配置与四类踩坑速查
人工智能·agent·ai编程
MartinYeung539 分钟前
[论文学习]PoisonBench:评估语言模型对投毒偏好数据的脆弱性
人工智能·学习·语言模型
ting94520006 小时前
Humalike X Hermes 深度技术剖析:单指令注入群聊社交智能的底层架构、算法与跨 IM 平台实现
人工智能·算法·架构
涤生大数据7 小时前
一次“没有运行日志”的DolphinScheduler任务失败排查
大数据·数据库·人工智能·状态模式
东风破_7 小时前
Vibe Coding 上头之后,我开始用 SDD 给 AI 编程加一张“施工图”
人工智能·程序员
weixin_403810137 小时前
AI智能体写安卓自动化脚本教程:Cursor/Trae+CLI 实战,自然语言生成代码
android·人工智能·自动化·跨境电商·安卓自动化脚本·多账户运营
深圳雨林凯AI7 小时前
雨林凯AI四方连图介质适配原理:像素密度、纱线纹理与颜色管理怎么协调
人工智能
ZGIAI8 小时前
ZGI 混合检索:汇集候选并统一重排
人工智能·架构
ZGIAI8 小时前
ZGI 运行日志:还原任务与节点状态
人工智能·架构
Scott9999HH8 小时前
2026 中小企业如何破局 AI 搜索?轻量化 GEO 优化系统架构设计与 Python 实战落地
人工智能