| 经过几个月的努力,小白终于完成了市面上第一本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.
本文详细介绍了如何使用OpenCV 4的contourArea()和arcLength()函数来计算轮廓的面积和周长。这两个特性对于分析轮廓的统计信息和识别物体具有重要意义。文章通过示例程序展示了如何应用这些函数,包括闭合和非闭合轮廓的情况,并提供了相应的输出结果。
最低0.47元/天 解锁文章
977

被折叠的 条评论
为什么被折叠?



