zoukankan      html  css  js  c++  java
  • OpenCV kmeans代码

    代码:出处忘了

    //
    // 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;
        }
    }
    


     

     

  • 相关阅读:
    js瀑布流
    键盘控制物体走
    数组模拟三级联动
    会飞的小鸟小游戏 原生js
    js 广告 网页漂浮
    Vue 选项卡和 js 选项卡
    vue-购物车效果
    vue-温度控制/登录显示/反转
    vue初始
    php array_column 和array_multisort函数实现按某一字段对二维数组进行排序-test
  • 原文地址:https://www.cnblogs.com/wangyaning/p/4236968.html
Copyright © 2011-2022 走看看