⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fitellipse.c

📁 椭圆拟合
💻 C
字号:
/***********************************************************************************  This program is demonstration for ellipse fitting. Program finds *  contours and approximate it by ellipses.**********************************************************************************/#ifdef _CH_#pragma package <opencv>#endif#ifndef _EiC#include "cv.h"#include "highgui.h"#endifint slider_pos = 70;// Load the source image. HighGUI use.IplImage *image02 = 0, *image03 = 0, *image04 = 0;void process_image(int h);int main( int argc, char** argv ){    const char* filename = argc == 2 ? argv[1] : (char*)"stuff.jpg";        // load image and force it to be grayscale    if( (image03 = cvLoadImage(filename, 0)) == 0 )        return -1;    // Create the destination images    image02 = cvCloneImage( image03 );    image04 = cvCloneImage( image03 );    // Create windows.    cvNamedWindow("Source", 1);    cvNamedWindow("Result", 1);    // Show the image.    cvShowImage("Source", image03);    // Create toolbars. HighGUI use.    cvCreateTrackbar( "Threshold", "Result", &slider_pos, 255, process_image );    process_image(0);    // Wait for a key stroke; the same function arranges events processing                    cvWaitKey(0);    cvReleaseImage(&image02);    cvReleaseImage(&image03);    cvDestroyWindow("Source");    cvDestroyWindow("Result");    return 0;}// Define trackbar callback functon. This function find contours,// draw it and approximate it by ellipses.void process_image(int h){    CvMemStorage* stor;    CvSeq* cont;    CvBox2D32f* box;    CvPoint* PointArray;    CvPoint2D32f* PointArray2D32f;        // Create dynamic structure and sequence.    stor = cvCreateMemStorage(0);    cont = cvCreateSeq(CV_SEQ_ELTYPE_POINT, sizeof(CvSeq), sizeof(CvPoint) , stor);        // Threshold the source image. This needful for cvFindContours().    cvThreshold( image03, image02, slider_pos, 255, CV_THRESH_BINARY );        // Find all contours.    cvFindContours( image02, stor, &cont, sizeof(CvContour),                     CV_RETR_LIST, CV_CHAIN_APPROX_NONE, cvPoint(0,0));        // Clear images. IPL use.    cvZero(image02);    cvZero(image04);        // This cycle draw all contours and approximate it by ellipses.    for(;cont;cont = cont->h_next)    {           int i; // Indicator of cycle.        int count = cont->total; // This is number point in contour        CvPoint center;        CvSize size;                // Number point must be more than or equal to 6 (for cvFitEllipse_32f).                if( count < 6 )            continue;                // Alloc memory for contour point set.            PointArray = (CvPoint*)malloc( count*sizeof(CvPoint) );        PointArray2D32f= (CvPoint2D32f*)malloc( count*sizeof(CvPoint2D32f) );                // Alloc memory for ellipse data.        box = (CvBox2D32f*)malloc(sizeof(CvBox2D32f));                // Get contour point set.        cvCvtSeqToArray(cont, PointArray, CV_WHOLE_SEQ);                // Convert CvPoint set to CvBox2D32f set.        for(i=0; i<count; i++)        {            PointArray2D32f[i].x = (float)PointArray[i].x;            PointArray2D32f[i].y = (float)PointArray[i].y;        }                // Fits ellipse to current contour.        cvFitEllipse(PointArray2D32f, count, box);                // Draw current contour.        cvDrawContours(image04,cont,CV_RGB(255,255,255),CV_RGB(255,255,255),0,1,8,cvPoint(0,0));                // Convert ellipse data from float to integer representation.        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;                // Draw ellipse.        cvEllipse(image04, center, size,                  box->angle, 0, 360,                  CV_RGB(0,0,255), 1, CV_AA, 0);                // Free memory.                  free(PointArray);        free(PointArray2D32f);        free(box);    }        // Show image. HighGUI use.    cvShowImage( "Result", image04 );}#ifdef _EiCmain(1,"fitellipse.c");#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -