OpenCV kmeans代码

来源:互联网 发布:淘宝买东西怎么改价格 编辑:程序博客网 时间:2024/05/21 18:47

 

 

 

代码:出处忘了

 

//// Example 13-1. Using K-means/////* *************** License:**************************   Oct. 3, 2008   Right to use this code in any way you want without warrenty, support or any guarentee of it working.   BOOK: It would be nice if you cited it:   Learning OpenCV: Computer Vision with the OpenCV Library     by Gary Bradski and Adrian Kaehler     Published by O'Reilly Media, October 3, 2008    AVAILABLE AT:      http://www.amazon.com/Learning-OpenCV-Computer-Vision-Library/dp/0596516134     Or: http://oreilly.com/catalog/9780596516130/     ISBN-10: 0596516134 or: ISBN-13: 978-0596516130       OTHER OPENCV SITES:   * The source code is on sourceforge at:     http://sourceforge.net/projects/opencvlibrary/   * The OpenCV wiki page (As of Oct 1, 2008 this is down for changing over servers, but should come back):     http://opencvlibrary.sourceforge.net/   * An active user group is at:     http://tech.groups.yahoo.com/group/OpenCV/   * The minutes of weekly OpenCV development meetings are at:     http://pr.willowgarage.com/wiki/OpenCV   ************************************************** */#include "cxcore.h"#include "highgui.h"#pragma comment(lib,"opencv_core2410d.lib")#pragma comment(lib,"opencv_highgui2410d.lib")#pragma comment(lib,"opencv_ml2410d.lib")int main( int argc, char** argv ){    #define MAX_CLUSTERS 5 //最大聚类数    CvScalar color_tab[MAX_CLUSTERS];    IplImage* img = cvCreateImage( cvSize( 500, 500 ), 8, 3 );    CvRNG rng = cvRNG(0xffffffff);        color_tab[0] = CV_RGB(255,0,0);    color_tab[1] = CV_RGB(0,255,0);    color_tab[2] = CV_RGB(100,100,255);    color_tab[3] = CV_RGB(255,0,255);    color_tab[4] = CV_RGB(255,255,0);    cvNamedWindow( "clusters", 1 );    for(;;)    {        int k, cluster_count = cvRandInt(&rng)%MAX_CLUSTERS + 1;        int i, sample_count = cvRandInt(&rng)%1000 + 1;        CvMat* points = cvCreateMat( sample_count, 1, CV_32FC2 );        CvMat* clusters = cvCreateMat( sample_count, 1, CV_32SC1 );        /* generate random sample from multivariate            Gaussian distribution */        for( k = 0; k < cluster_count; k++ )        {            CvPoint center;            CvMat point_chunk;            center.x = cvRandInt(&rng)%img->width;            center.y = cvRandInt(&rng)%img->height;            cvGetRows( points, &point_chunk,                        k*sample_count/cluster_count,                       k == cluster_count - 1 ? sample_count :                         (k+1)*sample_count/cluster_count );            cvRandArr( &rng, &point_chunk, CV_RAND_NORMAL,                       cvScalar(center.x,center.y,0,0),                       cvScalar(img->width/6, img->height/6,0,0) );        }        /* shuffle samples */        for( i = 0; i < sample_count/2; i++ )        {            CvPoint2D32f* pt1 = (CvPoint2D32f*)points->data.fl +                                 cvRandInt(&rng)%sample_count;            CvPoint2D32f* pt2 = (CvPoint2D32f*)points->data.fl +                                  cvRandInt(&rng)%sample_count;            CvPoint2D32f temp;            CV_SWAP( *pt1, *pt2, temp );        }        cvKMeans2( points, cluster_count, clusters,                   cvTermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,                                    10, 1.0 ));        cvZero( img );        for( i = 0; i < sample_count; i++ )        {            CvPoint2D32f pt = ((CvPoint2D32f*)points->data.fl)[i];            int cluster_idx = clusters->data.i[i];            cvCircle( img, cvPointFrom32f(pt), 2,                       color_tab[cluster_idx], CV_FILLED );        }        cvReleaseMat( &points );        cvReleaseMat( &clusters );        cvShowImage( "clusters", img );        int key = cvWaitKey(0);        if( key == 27 ) // 'ESC'            break;    }}


 

 

 

 

0 0