OPENCV图形计算面积、弧长API讲解(1)

一.OPENCV图形面积、弧长计算的API介绍

之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API如contourArea、arcLength、minAreaRect、boundingRect、rectangle、line等等。

1.contourArea的API讲解

作用: 计算轮廓的曲线面积,也就是去计算**图像本身的面积,**计算的过程一般是用微积分等方式去计算。

复制代码
CV_EXPORTS_W double contourArea( InputArray contour, bool oriented = false );
第一个参数:contour指的是每一个轮廓的数据,也称之为轮廓的点
第二个参数:oriented表示的是某一个方向上轮廓的面积值
返回值:计算后的轮廓面积

2.arcLength的API讲解

**作用:**是计算轮廓的周长,也就是图形形状本身的曲线弧度周长

复制代码
CV_EXPORTS_W double arcLength( InputArray curve, bool closed );
第一个参数:curve轮廓曲线的2D像素点
第二个参数:closed轮廓或者曲线是否闭合标志,true表示闭合
返回值:计算后的轮廓周长

3.minAreaRect的API讲解

**作用:**是计算最小的外接矩形,最小外接矩形指的是找到一个矩形能够完全包裹所有的给定点,并且这个矩形是最小的。

如下图:从下图我们可以看到8这个形状,被minAreaRect的矩形包围了。这个矩形包含了整个形状的所有点,**更重要的这个矩形具有旋转功能,**这个8实际上有倾斜的角度,而这个最小矩形也能够完美包含进来。

复制代码
CV_EXPORTS_W RotatedRect minAreaRect( InputArray points );
第一个参数:points输入的二维点数,可以Mat类型也可以是std::vector的向量类型
返回值:RotatedRect的矩形对象, 它表示的是一个轮廓的最小外接矩形,

我们来看看RotatedRect结构体成员变量

center 旋转矩形的质心

size **:**旋转矩形的宽度和高度

angle **:**顺时针的旋转角度。

RotatedRect的四个点的确定

RotatedRect中矩形四个点通常用Point2f来表示,其中p[0]点的确定是最关键的,p[0]的位置通常分为两种情况:

  1. 如果当前最小外接矩形没有与坐标轴平行,则Y坐标最大的为点p[0],如2,3,4三张图
  2. 如果当前最小矩形和坐标轴平行,则有两个Y坐标最大的点,如图1

4.boundingRect的API讲解

作用: 是计算图形轮廓垂直边界的最小矩形,这个矩形必须要和图像是上下边界平行的

我们看上图:我们还是看8这个形状依然还是之前的位置,然后boundingRect产生的矩形对整个8进行垂直边界包围。

复制代码
CV_EXPORTS_W Rect boundingRect( InputArray array );
第一个参数:array输入的灰度图像或者2D点集,数据类型为vector或者Mat矩阵数据
返回值:Rect的矩形对象,它表示的是物体轮廓的最大外接矩形。我们来看看Rect主要的成员变量

Rect结构体

x **:**矩形的x坐标轴

y 矩形的y坐标轴

width **:**矩形的宽度

height **:**矩形的高度

5.rectangle API 讲解

**作用:**是绘制矩形,它有两种表示形式

1.以两个顶点的方式画矩形

复制代码
void cv::rectangle(InputOutputArray img,
                     Point pt1,
                     Point pt2,
                     const Scalar & color,
                     int  thickness = 1,
                     int  lineType = LINE_8, 
                     int  shift = 0)

**第一个参数:**输入的矩阵图像数据

**第二个参数:**pt1是矩形的一个顶点,左上角的顶点

**第三个参数:**pt2矩形中与pt1相对的顶点,也就是两个点在对角线上,也就是右下角的顶点

**第四个参数:**Scalar颜色的标量

**第五个参数:**thickness线宽

**第六个参数:**lineType线的类型,默认是LINE_8就行,具体的类型如下图:

**第七个参数:**shift坐标的小数点位,默认为0就可以

2.以 Rect 的方式画矩形

复制代码
void cv::rectangle(InputOutputArray img,
                     Rect rec,
                     const Scalar & color, 
                     int  thickness = 1,
                     int  lineType = LINE_8, int  shift = 0)  

第一个参数:输入的矩阵图像数据

第二个参数:Rect的结构体,我们来看看这个Rect的重要成员变量

x:矩形的x坐标轴

y 矩形的y坐标轴

width **:**矩形的宽度

height **:**矩形的高度

**第三个参数:**Scalar颜色的标量

**第四个参数:**thickness线宽,默认是1

**第五个参数:**lineType线的类型,默认是LINE_8就行,line的类型如下:

**第六个参数:**shift坐标点的小数点位

6.line API 讲解

**作用:**是通过两个点绘制直线

复制代码
CV_EXPORTS_W void line(InputOutputArray img, 
                        Point pt1, 
                        Point pt2, 
                        const Scalar& color,
                        int thickness = 1, 
                        int lineType = LINE_8, 
                        int shift = 0);

**第一个参数:**输入的矩阵图像数据

第二个参数: pt1是线的起始坐标,也就是图上x1坐标和y1坐标
**第三个参数:**pt2是线的终点坐标,也就是图上x2坐标和y2坐标

第四个参数: Scalar是颜色标量,绘制直线的颜色
**第五个参数:**thickness它是线的粗细程度,默认为1

**第六个参数:**lineType线的类型,默认是LINE_8就行,具体的类型

**第七个参数:**shift坐标点的小数点位数

相关推荐
我爱鸢尾花几秒前
RNN公式推导、案例实现及Python实现
人工智能·python·rnn·深度学习·神经网络·算法
i***58673 分钟前
自动驾驶---E2E架构演进
人工智能·架构·自动驾驶
二哈喇子!3 分钟前
如何在昇腾平台上部署与优化vLLM:高效推理与性能提升指南
人工智能
CV-杨帆3 分钟前
大模型生成(题目)安全
人工智能
SmartBrain4 分钟前
思考:用信任创造共同的远方
人工智能·华为·创业创新
愤怒的可乐4 分钟前
从零构建大模型智能体:实现可扩展工具系统
人工智能·大模型·智能体框架
汽车仪器仪表相关领域5 分钟前
PSN-1:氮气加速 + 空燃比双控仪 ——NOS 系统的 “安全性能双管家”
大数据·linux·服务器·人工智能·功能测试·汽车·可用性测试
汽车仪器仪表相关领域17 分钟前
PSB-1:安全增压与空燃比双监控仪表 - 高性能引擎的 “双重安全卫士“
java·人工智能·功能测试·单元测试·汽车·可用性测试·安全性测试
攻城狮杰森22 分钟前
AI·重启思维:Gemini 3 带你走进智能的下一个维度
人工智能·语言模型·ai作画·aigc·googlecloud
糖葫芦君22 分钟前
20-Gradient Surgery for Multi-Task Learning
人工智能