opencv 椭圆拟合

转载 2012年03月25日 20:56:43
#include "cv.h"
#include "highgui.h"

int slider_pos=70;//阈值

IplImage *image02 =0,*image03 = 0,*image04 = 0;
void process_image(int h);

int main(int argc ,char **argv)
{
    const char *filename ="rice.png";
    if ((image03 = cvLoadImage(filename,0))==0)//读入图像为灰度图像
    {
        return -1;
    }
    image02 = cvCloneImage(image03);
    image04 = cvCloneImage(image03);
    
    cvNamedWindow("Source",1);
    cvNamedWindow("Result",1);

    cvShowImage("Source",image03);

    cvCreateTrackbar("Threshold","Result",&slider_pos,255,process_image);

    process_image(0);

    cvWaitKey(0);
    cvSaveImage("1.jpg",image04);

    cvReleaseImage(&image02);
    cvReleaseImage(&image03);

    cvDestroyWindow("Source");
    cvDestroyWindow("Result");
    return 0;

}

//这个函数寻找出轮廓、用椭圆拟合画出
void process_image(int h)
{
    CvMemStorage *stor;
    CvSeq *cont;
    CvBox2D32f *box;
    CvPoint *PointArray;
    CvPoint2D32f *PointArray2D32f;

    stor = cvCreateMemStorage(0);
    cont = cvCreateSeq(CV_SEQ_ELTYPE_POINT,sizeof(CvSeq),sizeof(CvPoint),stor);

    cvThreshold(image03,image02,slider_pos,255,CV_THRESH_BINARY);

    cvFindContours(image02,stor,&cont,sizeof(CvContour),
        CV_RETR_LIST,CV_CHAIN_APPROX_NONE,cvPoint(0,0));

    cvZero(image02);
    cvZero(image04);

    //绘制所有轮廓并用椭圆拟合
    for (;cont;cont = cont ->h_next)
    {
        int i;
        int count= cont->total;//轮廓个数
        CvPoint center;
        CvSize size;

        /*个数必须大于6,这是cvFitEllipse_32f的要求*/
        if (count<6)
        {
            continue;
        }
    
        //分配内存给点集
        PointArray = (CvPoint *)malloc(count*sizeof(CvPoint));
        PointArray2D32f = (CvPoint2D32f*)malloc(count*sizeof(CvPoint2D32f));
    
        //分配内存给椭圆数据
        box = (CvBox2D32f *)malloc(sizeof(CvBox2D32f));

        //得到点集(这个方法值得借鉴)
        cvCvtSeqToArray(cont,PointArray,CV_WHOLE_SEQ);
    
        //将CvPoint点集转化为CvBox2D32f集合
        for (i=0;i<count;i++)
        {
            PointArray2D32f[i].x=(float)PointArray[i].x;
            PointArray2D32f[i].y=(float)PointArray[i].y;
        }

        //拟合当前轮廓
        cvFitEllipse(PointArray2D32f,count,box);

        //绘制当前轮廓
        cvDrawContours(image04,cont,CV_RGB(255,255,255),CV_RGB(255,255,255),
            0,1,8,cvPoint(0,0));

        //将椭圆数据从浮点转化为整数表示
        center.x = cvRound(box->center.x);
        center.y = cvRound(box->center.y);
        size.width = cvRound(box->size.width*0.5);
        size.height = cvRound(box->size.height*0.5);
        box->angle = -box->angle;

        //画椭圆
        cvEllipse(image04,center,size,box->angle,0,360,CV_RGB(0,0,255),1,CV_AA,0);

        free(PointArray);
        free(PointArray2D32f);
        free(box);
    }
    cvShowImage("Result",image04);
}

OpenCV:椭圆拟合

#include #include int slider_pos = 70; IplImage *image02 = 0, *image03 = 0, *image04 = 0; void p...
  • u010002704
  • u010002704
  • 2015年02月11日 15:33
  • 2687

opencv中的椭圆拟合

参考:http://blog.sina.com.cn/s/blog_662c785901011i7z.html
  • suky520
  • suky520
  • 2014年01月21日 12:09
  • 8062

opencv3用椭圆拟合二维点集-fitEllipse函数

#include #include #include using namespace cv; using namespace std; int main() { Mat srcImage(Siz...
  • qq_23880193
  • qq_23880193
  • 2015年10月20日 00:16
  • 5946

【OpenCV】椭圆拟合

直接上代码吧: 【OpenCV学习】椭圆拟合
  • Scythe666
  • Scythe666
  • 2014年08月19日 10:18
  • 1518

OpencV使用fitEllipse拟合椭圆后,获取椭圆参数

OpencV使用fitEllipse拟合椭圆后,获取椭圆参数
  • sinat_31425585
  • sinat_31425585
  • 2017年07月14日 12:04
  • 1398

最小二乘法椭圆拟合

【原文:http://blog.csdn.net/alop_daoyan/article/details/42296565】   对平面上的一些点拟合有很多手段,其中椭圆拟合在图像轮廓划分等...
  • zhazhiqiang2010
  • zhazhiqiang2010
  • 2015年05月18日 17:26
  • 6001

OpenCV—椭圆拟合fitEllipse

本文的主要参考为官方文档OpenCV249-fitEllipse和博客-opencv中的椭圆拟合 以及《Learning OpenCV 3》page424-425 OpenCV中提供的椭圆拟合AP...
  • i_chaoren
  • i_chaoren
  • 2017年10月26日 21:32
  • 173

圆及椭圆拟合

在opencv学习中,圆和椭圆的拟合是必不可少的,下面我就用一个简单的例子介绍一下我们如何用opencv来拟合。       实验描述:                      输入:图像文件s...
  • woyantianyi
  • woyantianyi
  • 2012年12月23日 12:27
  • 6042

opencv椭圆拟合长短轴比

  • 2013年06月12日 10:28
  • 1KB
  • 下载

opencv椭圆拟合

  • 2016年11月04日 20:16
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:opencv 椭圆拟合
举报原因:
原因补充:

(最多只允许输入30个字)