【OpenCV 4开发详解】轮廓面积与长度

本文详细介绍了如何使用OpenCV 4的contourArea()和arcLength()函数来计算轮廓的面积和周长。这两个特性对于分析轮廓的统计信息和识别物体具有重要意义。文章通过示例程序展示了如何应用这些函数,包括闭合和非闭合轮廓的情况,并提供了相应的输出结果。
摘要由CSDN通过智能技术生成
本文首发于 “小白学视觉”微信公众号,欢迎关注公众号
本文作者为小白,版权归 人民邮电出版社发行所有,禁止转载,侵权必究!

经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。

轮廓面积

轮廓面积是轮廓重要的统计特性之一,通过轮廓面积的大小可以进一步分析每个轮廓隐含的信息,例如通过轮廓面积区分物体大小识别不同的物体。轮廓面积是指每个轮廓中所有的像素点围成区域的面积,单位为像素。OpenCV 4提供了检测轮廓面积的contourArea()函数,该函数的函数原型在代码清单7-15中给出。

代码清单7-15 contourArea()函数原型
1.	double cv::contourArea(InputArray  contour,
2.	                            bool  oriented = false 
3.	                            )
  • contour:轮廓的像素点
  • oriented:区域面积是否具有方向的标志,true表示面积具有方向性,false表示不具有方向性,默认值为不具有方向性的false。

该函数用于统计轮廓像素点围成区域的面积,函数的返回值是统计轮廓面积的结果,数据类型为double。函数第一个参数表示轮廓的像素点,数据类型为vector或者Mat,相邻的两个像素点之间逐一相连构成的多边形区域即为轮廓面积的统计区域。连续的三个像素点之间的连线有可能在同一条直线上,因此为了减少输入轮廓像素点的数目,可以只输入轮廓的顶点像素点,例如一个三角形的轮廓,轮廓中可能具有每一条边上的所有像素点,但是在统计面积时可以只输入三角形的三个顶点。函数第二个参数是区域面积是否具有方向的标志,参数为true时表示统计的面积具有方向性,轮廓顶点顺时针给出和逆时针给出时统计的面积互为相反数;参数为false时表示统计的面积不具有方向性,输出轮廓面积的绝对值。

为了了解该函数的使用方法,在代码清单7-16中给出了统计轮廓面积的示例程序。程序中给出一个直角三角形轮廓的三个顶点以及斜边的中点,统计出的轮廓面积与三角形的面积相等,同时统计图7-16中每个轮廓的面积,程序的运行结果在图7-18给出。

代码清单7-16 myContourArea.cpp计算轮廓面积
1.	#include <opencv2\opencv.hpp>
2.	#include <iostream>
3.	#include <vector>
4.	
5.	using namespace cv;
6.	using namespace std;
7.	
8.	int main()
9.	{
   
10.		system("color F0");  //更改输出界面颜色
11.		//用四个点表示三角形轮廓
12.		vector<Point> contour;
13.		contour.push_back(Point2f(0, 0));
14.		contour.push_back(Point2f(10, 0));
15.		contour.push_back(Point2f(10, 10));
16.		contour.push_back(Point2f(5, 5));
17.		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学视觉

您的赞赏是我们坚持下去的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值