博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【OpenCV学习】椭圆拟合
阅读量:4659 次
发布时间:2019-06-09

本文共 2342 字,大约阅读时间需要 7 分钟。

作者:

出处:

 

#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
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);}

作者:

出处:

转载于:https://www.cnblogs.com/gnuhpc/archive/2012/12/04/2802154.html

你可能感兴趣的文章
造题目数据的觅食指南
查看>>
银联高校极客挑战赛 初赛 第一场
查看>>
2019银联高校极客挑战赛 复赛
查看>>
银联高校极客挑战赛 初赛 第二场
查看>>
windows更改文件打开方式
查看>>
windows10 注销 锁定
查看>>
下载文件的文件名之思考
查看>>
微信分享链接时怎样才能带上带缩略图和简介
查看>>
2019 年百度之星·程序设计大赛 - 复赛
查看>>
添加其它邮箱
查看>>
Fiji-imageJ 无法打开
查看>>
excel acm 高校排名(hdoj)
查看>>
给从论文复制的文本设置正确的格式(可设置快捷键)
查看>>
堆排序和优先队列
查看>>
非比较排序
查看>>
归并排序
查看>>
scrapy
查看>>
初学java 之 类型转化 笔记
查看>>
冒泡排序
查看>>
git使用系列 4.1 git 实践(一) pull的使用
查看>>