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

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

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

算法描述

围绕一组2D点拟合一个椭圆。

该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据可能包含负索引。”

fitEllipse 函数是 OpenCV 库中的一个常用函数,用于拟合一个椭圆来描述一组点。这个函数通常用于图像处理和计算机视觉任务中,例如物体检测、形状分析等。

函数原型


RotatedRect cv::fitEllipse
(	InputArray 	points
)	

参数

  • 参数points 输入的2D点集。这些点可以存储在 std::vector 或 Mat 中。

代码示例


#include <opencv2/opencv.hpp>
#include <vector>using namespace cv;int main()
{// 创建一个空白图像Mat img( 400, 400, CV_8UC3, Scalar( 255, 255, 255 ) );// 创建一组2D点std::vector< Point2f > points;points.push_back( Point2f( 150, 100 ) );points.push_back( Point2f( 100, 150 ) );points.push_back( Point2f( 200, 150 ) );points.push_back( Point2f( 200, 250 ) );points.push_back( Point2f( 100, 250 ) );points.push_back( Point2f( 150, 300 ) );// 拟合椭圆RotatedRect ellipse2 = fitEllipse( points );// 绘制拟合的椭圆Point2f center = ellipse2.center;  // 椭圆中心Size2f axes    = ellipse2.size;    // 轴长float angle    = ellipse2.angle;   // 旋转角度ellipse( img, center, axes, angle, 0, 360, Scalar( 0, 0, 255 ), 2 );// 绘制原始点for ( const auto& pt : points ){circle( img, pt, 5, Scalar( 0, 255, 0 ), -1 );}// 显示结果namedWindow( "Ellipse Fitting", WINDOW_AUTOSIZE );imshow( "Ellipse Fitting", img );waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 目标检测-YOLOv5
  • Java 日志
  • js逆向-实现哈希算法
  • 谈一谈MVCC
  • 基于 Konva 实现Web PPT 编辑器(二)
  • .Net Core 笔试1
  • C++入门基础篇
  • GO语言快速入门(比较乱)
  • Ansible变量与模板的高级使用技巧
  • 2024 RustChinaConf 赞助商介绍
  • 线程可见性问题?还是编译优化问题?
  • golang fmt.Printf中 %q
  • 【React】Vite 构建 React
  • Zustand 状态调试以及持久话
  • SpringBoot与Minio的极速之旅:解锁文件切片上传新境界
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【css3】浏览器内核及其兼容性
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 3.7、@ResponseBody 和 @RestController
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • IP路由与转发
  • JavaScript对象详解
  • MQ框架的比较
  • MYSQL 的 IF 函数
  • MySQL主从复制读写分离及奇怪的问题
  • yii2权限控制rbac之rule详细讲解
  • 多线程 start 和 run 方法到底有什么区别?
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 技术发展面试
  • 算法-图和图算法
  • 微信小程序设置上一页数据
  • 译米田引理
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 函数计算新功能-----支持C#函数
  • ​渐进式Web应用PWA的未来
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (02)Hive SQL编译成MapReduce任务的过程
  • (HAL库版)freeRTOS移植STMF103
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (算法)前K大的和
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • ..回顾17,展望18
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET Standard 的管理策略
  • .net 调用海康SDK以及常见的坑解释
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET微信公众号开发-2.0创建自定义菜单
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • /bin/rm: 参数列表过长"的解决办法
  • @Autowired多个相同类型bean装配问题
  • @JSONField或@JsonProperty注解使用