当前位置: 首页 > news >正文

OpenCV结构分析与形状描述符(7)计算轮廓的面积的函数contourArea()的使用

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

算法描述

计算轮廓的面积。

该函数计算轮廓的面积。与 moments 类似,面积是使用格林公式计算的。因此,返回的面积与你使用 drawContours 或 fillPoly 绘制轮廓时的非零像素数量可能会不同。此外,对于自相交的轮廓,该函数很可能会给出错误的结果。
例子:

vector<Point> contour;
contour.push_back(Point2f(0, 0));
contour.push_back(Point2f(10, 0));
contour.push_back(Point2f(10, 10));
contour.push_back(Point2f(5, 4));
double area0 = contourArea(contour);
vector<Point> approx;
approxPolyDP(contour, approx, 5, true);
double area1 = contourArea(approx);
cout << "area0 =" << area0 << endl <<"area1 =" << area1 << endl <<"approx poly vertices" << approx.size() << endl;

函数原型


double cv::contourArea	
(InputArray 	contour,bool 	oriented = false 
)		

参数

  • 参数contour 输入的二维点向量(轮廓顶点),存储在 std::vector 或 Mat 中
  • 参数oriented 有向面积标志。如果该值为真,则函数会返回一个根据轮廓方向(顺时针或逆时针)而定的带符号的面积值。利用此功能,可以通过获取面积的符号来确定轮廓的方向。默认情况下,该参数为假,这意味着返回的是绝对值。

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 创建一个简单的二值图像cv::Mat img = cv::Mat::zeros( 300, 300, CV_8UC1 );// 添加一个矩形轮廓cv::rectangle( img, cv::Rect( 50, 50, 100, 100 ), cv::Scalar( 255 ), cv::FILLED );// 显示原始二值图像cv::imshow( "Binary Image", img );// 查找图像中的轮廓std::vector< std::vector< cv::Point > > contours;std::vector< cv::Vec4i > hierarchy;cv::findContours( img, contours, hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE );// 计算每个轮廓的面积for ( const auto& contour : contours ){double area = cv::contourArea( contour );std::cout << "Contour area (absolute): " << area << std::endl;// 计算带符号的面积double oriented_area = cv::contourArea( contour, true );std::cout << "Contour oriented area: " << oriented_area << std::endl;}// 绘制轮廓cv::drawContours( img, contours, -1, cv::Scalar( 128 ), 2 );// 显示带有轮廓的图像cv::imshow( "Image with Contour", img );cv::waitKey( 0 );cv::destroyAllWindows();return 0;
}

运行结果

终端输出:

Contour area (absolute): 9801
Contour oriented area: -9801

图像输出:
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何在3D无序抓取中应用深度学习算法?
  • 鼠标纵向滑动的横向滚动页面
  • 计算机网络27——Linux1
  • 客户端时间和服务器时间的区别
  • 如何编写测试用例?
  • 浅谈网络安全的认识与学习规划
  • 【2024数模国赛赛题思路公开】国赛C题第二套思路丨附可运行代码丨无偿自提
  • 计算机毕业设计Python+Tensorflow股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
  • 苹果qq文件过期了怎么恢复?简单4招,拯救你的过期文件
  • 华为人工智能重要服务总结
  • MongoDB-聚合查询操作介绍
  • c++编程(25)——unordered_map模拟实现
  • 安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单
  • spark读取csv文件
  • [数据结构]红黑树之插入操作(RBTree)
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【comparator, comparable】小总结
  • 230. Kth Smallest Element in a BST
  • Android交互
  • ES2017异步函数现已正式可用
  • JS专题之继承
  • laravel with 查询列表限制条数
  • Linux快速复制或删除大量小文件
  • PV统计优化设计
  • python_bomb----数据类型总结
  • react-native 安卓真机环境搭建
  • Redis字符串类型内部编码剖析
  • Zsh 开发指南(第十四篇 文件读写)
  • 机器学习 vs. 深度学习
  • 计算机在识别图像时“看到”了什么?
  • 排序算法之--选择排序
  • 协程
  • 智能网联汽车信息安全
  • 国内开源镜像站点
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • !!Dom4j 学习笔记
  • #pragam once 和 #ifndef 预编译头
  • #大学#套接字
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (HAL库版)freeRTOS移植STMF103
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (python)数据结构---字典
  • (第61天)多租户架构(CDB/PDB)
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (十)T检验-第一部分
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET 8.0 中有哪些新的变化?
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net 连接达梦数据库开发环境部署
  • .NET导入Excel数据
  • .net连接MySQL的方法