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;
}

运行结果

相关推荐
奔跑中的小象6 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南6 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang6 小时前
LangGraph 状态机实战
人工智能
刹那芳华19926 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作6 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门6 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜7 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟7 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦7 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能
阿里云云原生7 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能