gpt4 book ai didi

c++ - OpenCV:CvBox2D 角度

转载 作者:行者123 更新时间:2023-11-28 07:16:15 29 4
gpt4 key购买 nike

我正在做一些头部跟踪,我正在尝试通过使用 openCV 将椭圆拟合到头部轮廓来估计滚动角度。一切正常,cvFitEllipse2 返回一个 CvBox2D。我想用盒子的角度来计算滚动角,即图像的y轴和椭圆的长轴之间的角度。

他们说方框角度是水平轴和第一条边(即长度)之间的角度,但我得到的结果有些奇怪。

  • 天使是 180°,以防我的头朝上。
  • 当我向右倾斜时,角度通常会减小到 135° 左右,然后突然跳到 315° 左右。
  • 当我向左倾斜时,角度上升到 260° 左右,没有任何奇怪的变化。

这是一段简短的视频: cvBox2D angle

知道发生了什么以及如何计算滚动角吗?

这是我的代码:

  CvBox2D box;
CvPoint center;
CvSize size;
int count = largest_contour->total;

CvMat* points_f = cvCreateMat( 1, count, CV_32FC2 );
CvMat points_i = cvMat( 1, count, CV_32SC2, points_f->data.ptr );
cvCvtSeqToArray(largest_contour, points_f->data.ptr, CV_WHOLE_SEQ );
cvConvert( &points_i, points_f );

box = cvFitEllipse2(points_f);
center = cvPointFrom32f(box.center);
size.width = cvRound(box.size.width*0.5);
size.height = cvRound(box.size.height*0.5);

cvEllipse(dst,center,size,box.angle,0,360,cvScalar(0,255,0),2,8,0);

float newAngle = (box.angle > 90 ? 180 - box.angle : -1*(box.angle));

最佳答案

所以,我找到了问题的答案。

如果您查看可在 ...\modules\imgproc\src 文件中找到的 cvFitEllipse2 函数的源代码:“shapedescr.cpp”,您会发现有两种不同的椭圆拟合算法。默认情况下,我使用的 openCV231 版本只使用一个。

icvFitEllipse_F是导致我出现问题的函数,但是算法中还有一部分没有用到,因为cvFitEllipse2函数的代码中有如下语句:

#if 1
icvFitEllipse_F( ptseq, &box );
#else
/*
* New fitellipse algorithm, contributed by Dr. Daniel Weiss
*/

所以没有编译新的fitellipse算法。

通过将#if 1 更改为#if 0,编译并使用了另一个算法而不是 icvFitEllipse_F,现在一切正常。

关于c++ - OpenCV:CvBox2D 角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20206541/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com