OpencV使用fitEllipse拟合椭圆后,获取椭圆参数
转载:https://blog.csdn.net/sinat_31425585/article/details/75103239?utm_source=blogxgwz0
使用OpenCV的fitEllipse函数拟合椭圆后,会得到一个RotatedRect类型的返还值,首先介绍一下RotatedRect结构,这个参考的无左无右的博客:点击打开链接,嫌左右跳麻烦,所以直接贴过来
class CV_EXPORTS RotatedRect
{ public: //构造函数
RotatedRect();
RotatedRect(const Point2f& center, const Size2f& size, float angle);
RotatedRect(const CvBox2D& box);
void points(Point2f pts[]) const; //!返回矩形的4个顶点
Rect boundingRect() const; //返回包含旋转矩形的最小矩形
operator CvBox2D() const; //!转换到旧式的cvbox2d结构
Point2f center; //矩形的质心
Size2f size; //矩形的边长
float angle; //旋转角度,当角度为0、90、180、270等时,矩形就成了一个直立的矩形
};
需要注意的是angle对应角度是角度,如果使用三角函数sin,cos,tan之类的需要先转换成弧度,boundingRect对应水平方向外接矩形而不是椭圆的外接矩形,如果需要获取椭圆的两个半轴长度可以通过size.width和size.height得到,其余的参数看一下上面代码对应注释.
下面就是怎么通过一个RotatedRect来获取椭圆参数,具体原理可以参考百度文库的一个文档:点击打开链接,直接截图看一下:
因为这里默认的是顺时针旋转为正,而图像里面默认是逆时针旋转为正,只需要把B乘以一个负号就行,感兴趣的同学自己推导一下.
好了,到了上代码的时间了,代码如下:
#include <opencv2//opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
struct EllipsePara
{
Point2f c;
float A;
float B;
float C;
float F;
};
void getEllipsePara(RotatedRect & ellipsemege, EllipsePara& EP_t)
{
float theta = ellipsemege.angle * CV_PI / 180.0 ;
float a = ellipsemege.size.width / 2.0;
float b = ellipsemege.size.height / 2.0;
EP_t.c.x = ellipsemege.center.x;
EP_t.c.y = ellipsemege.center.y;
EP_t.A = a * a * sin(theta) * sin(theta) + b * b * cos(theta) * cos(theta);
EP_t.B = (-2.0) * (a * a - b * b) * sin(theta) * cos(theta);
EP_t.C = a * a * cos(theta) * cos(theta) + b * b * sin(theta) * sin(theta);
EP_t.F = (-1.0) * a * a * b * b;
//cout << "theta: " << theta << " x: " << EP.c.x << " y: " << EP.c.y << " C: " << EP.C << " F: " << EP.F << endl;
}
void main()
{
//RotatedRect(const Point2f& center, const Size2f& size, float angle);
RotatedRect Rec_t = RotatedRect(Point2f(0,0), Size2f(4,1), 90);
cout << Rec_t.size.width << " " << Rec_t.size.height << endl;
cout << Rec_t.boundingRect().width << " " << Rec_t.boundingRect().height << endl;
EllipsePara EP_t;
getEllipsePara(Rec_t, EP_t);
cout << EP_t.A << " " << EP_t.B << " " << EP_t.C << " " << EP_t.F << endl;
}
得到的椭圆方程为:
OpencV使用fitEllipse拟合椭圆后,获取椭圆参数相关推荐
- java grabcut,在OpenCV中应用GrabCut算法后获取相同的图像
我使用GrabCut算法来分割我的图像my image,以检测我图像中的柑橘(水果)作为前景并从背景中减去它 . 为此,首先我必须在我的对象(水果)周围选择2个点,用于在我的对象(水果)周围绘制矩形, ...
- PHP关闭$_ENV后获取服务器参数的办法
为什么80%的码农都做不了架构师?>>> <?php header('Content-type:text/html;charset=utf-8'); print_r($_ ...
- 【OpenCV 例程300篇】214. 绘制椭圆的参数详解
OpenCV 例程200篇 总目录 [youcans 的 OpenCV 例程300篇]214. 绘制椭圆的参数详解 OpenCV提供了绘图功能,可以在图像上绘制直线.矩形.圆.椭圆等各种几何图形. 7 ...
- cv2.fitEllipse函数详解:ellipse参数并根据参数计算出椭圆焦点坐标
cv2.fitEllipse函数详解:ellipse参数并根据参数计算出椭圆焦点坐标 最近因为用到了这个函数,所以就趁着这个机会,好好顺顺,做下记录. ellipse = cv2.fitEllipse ...
- python用函数绘制椭圆_详解opencv中画圆circle函数和椭圆ellipse函数
1. void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, doub ...
- 标准椭圆和任意椭圆方程之间的变换公式推导
我们在高中数学中就学习过标准的椭圆方程如下:x2a2+y2b2=1\frac{x^2}{a^2}+\frac{y^2}{b^2}=1a2x2+b2y2=1这个方程表示一个中心在坐标原点.长轴延xx ...
- wpf浏览器应用程序发布后获取当前应用地址
AppDomain.CurrentDomain.ApplicationIdentity.CodeBase 获取作为URL的部署清单的位置 Eg:发布前地址为E:\PROJECTWORK\Landa ...
- python执行系统命令后获取返回值的几种方式集合
第一种情况 os.system('ps aux') 执行系统命令,没有返回值 第二种情况 result = os.popen('ps aux') res = result.read() for lin ...
- 椭圆中心到椭圆切线的距离
本文将要讨论的是椭圆中心到椭圆切线的距离公式,在求这个距离之前,我们首先要知道两个定理. 定理1:椭圆 上的点到椭圆左,右焦点的距离分别是和,其中是椭圆的离心率. 定理2:椭圆(1)上的点处的切线方程 ...
- Mybatis插入数据后获取主键的值
Mybatis插入数据后获取主键的值 1. 所使用的数据库是支持自增的,且主键是自增的 <!-- 支持自增的数据库且主键是自增的:自动将插入后自增id的值赋值给传入的Employee的id--& ...
最新文章
- 【CV】Pytorch一小时教程添加损失函数图像可视化训练过程
- 一堆棋子java代码编程_网易2018校招内推编程题-堆棋子-C++实现
- 文本间加入任意字符的PHP函数
- Maven projects need to be imported反复弹出如何办?
- JEECG商业版本授权说明(仅限企业用户)
- 提示账户不被允许使用docker的情况
- 大佬是如何实现本地通讯的?
- 教育版AutoCAD下载开启,你知道吗?
- centos7安装tomcat8
- 人口增长模型——基于matlab语言
- 2007中国优秀手机客户端软件和无线互联网
- Limesdr软件无线电架构的理解
- basler相机详细使用说明
- 中国海外文物拍卖天价
- 网络时钟同步系统概述
- 自适应网页(响应式布局)+弹性布局
- 多伦多大学朱子宁:一种选择语言探针的信息论观点
- 苹果屏保壁纸_神经病手势时钟-手势数字时钟app下载android安卓版ios苹果版
- JZOJ1496 页
- 资深办公室人员搞定数字转换Excel的精品秘诀
热门文章
- js高级学习笔记(b站尚硅谷)-15-闭包的剩余知识
- 输出分组_数据科学|pandas教程--分组和聚合
- mysql 窗口函数_MySQL-窗函数
- 根据ip地址制作html,根据ip掩码计算可用ip
- 故障恢复 stm32_77条STM32知识,千万不能错过!干货
- mysql_分组查询
- Java学习笔记之设计模式(6)观察者模式
- 00_kubernetes组件版本和配置策略
- (10)二进制文件方式部署Kubernetes高可用集群----------部署node节点
- 使用XMLHttpRequest