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

 

 

 

 

时间: 2024-09-19 09:05:52

OpenCV kmeans代码的相关文章

OpenCV中的KMeans算法介绍与应用

一.KMeans算法介绍 KMeans算法是MacQueen在1967年提出的,是最简单与最常见的数据分类方法之一.它做为一种常见数据分析技术在机器学习.数据挖掘.模式识别.图像分析等领域都有应用.如果从分类角度看,KMeans属于硬分类即需要人为指定分类数目,而MeanSift分类方法则可以根据收敛条件自动决定分类数目.从学习方法上来说,KMeans属于非监督学习方法即整个学习过程中不需要人为干预的学习方法,自动完成整个数据集合分类.对于给定的数据集合DS (Data Set)与输入的分类数目

OpenCV+OpenCL stereo match 代码

之前配置cuda跟opencv 的混合编程,发现只要使用的东西多半还要用opencv的代码编译一次,加上cuda的编译太浪费时间了,我看了几个博客,觉的opencl这个可能会比较好整,就把opencv里面的opencl代码的部分编译了一下,这个比较少,用的时候也能直接检测出来i7 自带的集成显卡: Device name:Intel(R) HD Graphics 4600   后面调试程序时候发现,2.4.4版本好像还没有直接能用的dll,2.4.10的build文件夹中就有可以直接调用的现成d

OpenCv 人脸检测的学习

最近公司要组织开发分享,但是自己还是新手真的不知道分享啥了,然后看了看前段时间研究过OpenCv,那么就分享他把. openCv就不介绍了,说下人脸检测,其实是通过openCv里边已经训练好的xml文件来进行的,我只是在学习. 我测试中我写了俩个Demo,其中一个是通过Carame来通过摄像头来进行人脸检测看看效果图: 可以看出检测出来的面部有线框. 第一个Dmeo是通过Jni编程来实现的人脸检测, (1)这是本地方法 package com.example.opencv.checkface2;

OpenCV+OpenGL 双目立体视觉三维重建

0.绪论 这篇文章主要为了研究双目立体视觉的最终目标--三维重建,系统的介绍了三维重建的整体步骤.双目立体视觉的整体流程包括:图像获取,摄像机标定,特征提取(稠密匹配中这一步可以省略),立体匹配,三维重建.我在做双目立体视觉问题时,主要关注的点是立体匹配,本文主要关注最后一个步骤三维重建中的:三角剖分和纹理贴图以及对应的OpenCV+OpenGL代码实现. 1.视差计算 1.1基于视差信息的三维重建 特征提取 由双目立体视觉进行三位重建的第一步是立体匹配,通过寻找两幅图像中的对应点获取视差.Op

Kmeans、Kmeans++和KNN算法比较

K-Means介绍        K-means算法是聚类分析中使用最广泛的算法之一.它把n个对象根据他们的属性分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高:而不同聚类中的对象相似度较小.其聚类过程可以用下图表示:         如图所示,数据样本用圆点表示,每个簇的中心点用叉叉表示.(a)刚开始时是原始数据,杂乱无章,没有label,看起来都一样,都是绿色的.(b)假设数据集可以分为两类,令K=2,随机在坐标上选两个点,作为两个类的中心点.(c-f)演示了聚类的两种迭代.

使用 OpenCV 识别图片中的猫咪

你知道 OpenCV 可以识别在图片中小猫的脸吗?而且是拿来就能用,不需要其它的库之类的. 之前我也不知道. 但是在 Kendrick Tan 曝出这个功能后,我需要亲自体验一下--去看看到 OpenCV 是如何在我没有察觉到的情况下,将这一个功能添加进了他的软件库(就像一只悄悄溜进空盒子的猫咪一样,等待别人发觉). 下面,我将会展示如何使用 OpenCV 的猫咪检测器在图片中识别小猫的脸.同样的,该技术也可以用在视频流中. 使用 OpenCV 在图片中检测猫咪 如果你查找过 OpenCV 的代

使用opencv后 runtime error! R6025-pure virtual function call 的解决方法

今天写了一段用到opencv的代码,最后主函数(main)返回时产生了runtime error! R6025-pure virtual function call 的错误提示.程序前面的所有代码都没有问题,就到最后return 0:的时候报错了. 看了opencv说明文档后知道在显示了一张图片后要将显示该图片的窗口给 destroy .原来部分代码是这样的 if (bol) {            PaintInterestingPoint(im1,map_point);        cv

计算机视觉库/人脸识别开源软件

中文车牌识别系统 EasyPR EasyPR 是一个开源的中文车牌识别系统. EasyPR是一个中文的开源车牌识别系统,其目标是成为一个简单.灵活.准确的车牌识别引擎. 相比于其他的车牌识别系统,EasyPR有如下特点: 它基于openCV这个开源库,这意味着所有它的代码都可以轻易的获取. 它能够...更多EasyPR信息 最近更新: EasyPR 1.3 Beta 发布,中文车牌识别系统 发布于 7个月前   开源生物特征识别库 OpenBR OpenBR 是一个用来从照片中识别人脸的工具.还

MacOS 安装 PHP的图片裁剪扩展Tclip

 Tclip是一个头像自动识别,php图片裁剪项目.他可以自动识别图片中的重要区域,并且在图片裁剪时保留重要区域.下面我们就来看看如何在MacOS上进行安装.     Tclip 用于图片裁剪,有以下特点: 能进行人脸识别.图片中有人脸,将自动视为人脸区域为重要区域,将不会被裁剪掉. 自动识别其它重要区域.如果图片中未识别出人脸,则会根据特征分布计算出重区域. 总而言之,自动识别图片中的重要区域,并且在图片裁剪时保留重要区域. 源码地址:https://github.com/exinnet/tc