Opencv javacv中的cvFitEllipse2需要什么数据?
我试图将一个椭圆拟合到javacv中的一组2D整型点,并不断遇到问题。所以我的问题是,cvFitEllipse2期望什么样的数据 从OpenCV的手册中我发现Opencv javacv中的cvFitEllipse2需要什么数据?,opencv,javacv,Opencv,Javacv,我试图将一个椭圆拟合到javacv中的一组2D整型点,并不断遇到问题。所以我的问题是,cvFitEllipse2期望什么样的数据 从OpenCV的手册中我发现 CvBox2D cvFitEllipse2(const CvArr* points) 参数 点–输入二维点集,存储在: std::vector或Mat(C++接口) CvSeq*或CvMat*(C接口) Nx2 numpy数组(Python接口) 我用以下方法尝试了CvSeq和CvMat: 1 CvSeq 错误:OpenCV错误:未
CvBox2D cvFitEllipse2(const CvArr* points)
参数
点–输入二维点集,存储在:
- std::vector或Mat(C++接口)
- CvSeq*或CvMat*(C接口)
- Nx2 numpy数组(Python接口)
我不太明白这一点。我在javacv的googlegroup上问过这个问题,但还没有得到任何反馈。我找到了一个解决问题的方法,使用了一个简单的浮点数组。以下是我的解决方案:
//6 2D-points stored in a 1-dimensional float array
float points[] = { 1.0f, 1.1f, 1.0f, 3.0f, 3.0f, 7.0f, 7.0f, 3.0f, 3.0f, 0.0f, 2.0f, 1.0f,1.0f, 0.0f};
//1 row matrix with 6 2-D points of type CV_32FC2 and a FloatPointer to the points array.
CvMat mat = cvMat(1, 6, CV_32FC2, new FloatPointer(points));
CvBox2D result = cvFitEllipse2(mat);
System.out.println(result);
结果:((4.42315,4.259364),(5.7341976,9.166761),146.46394)我找到了使用简单浮点数组解决问题的方法。以下是我的解决方案:
//6 2D-points stored in a 1-dimensional float array
float points[] = { 1.0f, 1.1f, 1.0f, 3.0f, 3.0f, 7.0f, 7.0f, 3.0f, 3.0f, 0.0f, 2.0f, 1.0f,1.0f, 0.0f};
//1 row matrix with 6 2-D points of type CV_32FC2 and a FloatPointer to the points array.
CvMat mat = cvMat(1, 6, CV_32FC2, new FloatPointer(points));
CvBox2D result = cvFitEllipse2(mat);
System.out.println(result);
结果:((4.42315,4.259364),(5.7341976,9.166761),146.46394)您尝试过使用CV_32F吗?有些函数只处理少数几个数据类型。可能std::vector也可以做到这一点。我尝试过CV_32F,但是:由于元素类型不合适,矩阵无法转换为点序列。我也尝试过将CvPoint2D32f存储到CvSeq中。同样的结果。我使用cvFitEllipse2的唯一方法是发送应用canny后发现的轮廓。但这对我没用。我需要能够发送特定的点,而不是全部。您是否尝试过使用CV_32F?有些函数只处理少数几个数据类型。可能std::vector也可以做到这一点。我尝试过CV_32F,但是:由于元素类型不合适,矩阵无法转换为点序列。我也尝试过将CvPoint2D32f存储到CvSeq中。同样的结果。我使用cvFitEllipse2的唯一方法是发送应用canny后发现的轮廓。但这对我没用。我需要能够发送特定的点,而不是全部。
//6 2D-points stored in a 1-dimensional float array
float points[] = { 1.0f, 1.1f, 1.0f, 3.0f, 3.0f, 7.0f, 7.0f, 3.0f, 3.0f, 0.0f, 2.0f, 1.0f,1.0f, 0.0f};
//1 row matrix with 6 2-D points of type CV_32FC2 and a FloatPointer to the points array.
CvMat mat = cvMat(1, 6, CV_32FC2, new FloatPointer(points));
CvBox2D result = cvFitEllipse2(mat);
System.out.println(result);