#include "stdafx.h"
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv2\legacy\legacy.hpp> int _tmain(int argc, _TCHAR* argv[])
{
CvEM em_model;
//CvEM em_model2;
CvEMParams params;
int N=;
//设置模型参数
params.covs = NULL;
params.means = NULL;
params.weights = NULL;
params.probs = NULL;
params.nclusters = N;
params.cov_mat_type = CvEM::COV_MAT_SPHERICAL;
//params.cov_mat_type = CvEM::COV_MAT_DIAGONAL;
params.start_step = CvEM::START_AUTO_STEP;
params.term_crit.max_iter = ;
params.term_crit.epsilon = 0.1;
params.term_crit.type = CV_TERMCRIT_ITER|CV_TERMCRIT_EPS; IplImage* img=cvLoadImage("frame18843.jpg");//加载图像,图像放在Debug文件夹里,这里是相对路径 cvNamedWindow( "原始图像", ); //创建窗口
cvShowImage( "原始图像", img ); //显示图像
//cvWaitKey(0); //等待按键 int i,j;
CvMat *samples=cvCreateMat((img->width)*(img->height),,CV_32FC1);//创建样本矩阵,CV_32FC3代表32位浮点3通道(彩色图像)
CvMat *clusters=cvCreateMat((img->width)*(img->height),,CV_32SC1);//创建类别标记矩阵,CV_32SF1代表32位整型1通道
cvReshape( samples, samples, , );
int k=;
for (i=;i<img->width;i++)
{
for (j=;j<img->height;j++)
{
CvScalar s;
//获取图像各个像素点的三通道值(RGB)
s.val[]=(float)cvGet2D(img,j,i).val[];
s.val[]=(float)cvGet2D(img,j,i).val[];
s.val[]=(float)cvGet2D(img,j,i).val[];
cvSet2D(samples,k++,,s);//将像素点三通道的值按顺序排入样本矩阵
}
}
int nCuster=;//聚类类别数,自己修改。
//cvKMeans2(samples,nCuster,clusters,cvTermCriteria(CV_TERMCRIT_ITER,100,1.0));//开始聚类,迭代100次,终止误差1.0
cvReshape( samples, samples, , );
em_model.train( samples, , params, clusters ); IplImage *bin=cvCreateImage(cvSize(img->width,img->height),IPL_DEPTH_8U,);//创建用于显示的图像,二值图像
k=;
int val=;
float step=/(nCuster-);
for (i=;i<img->width;i++)
{
for (j=;j<img->height;j++)
{
val=(int)clusters->data.i[k++];
CvScalar s;
s.val[]=-val*step;//这个是将不同类别取不同的像素值,
cvSet2D(bin,j,i,s); //将每个像素点赋值
}
}
cvNamedWindow( "聚类图像", ); //创建窗口
cvShowImage( "聚类图像", bin ); //显示图像
cvWaitKey(); //等待按键
cvDestroyWindow( "原始图像" );//销毁窗口
cvReleaseImage( &img ); //释放图像
cvDestroyWindow( "聚类图像" );//销毁窗口
cvReleaseImage( &bin ); //释放图像
return ;
}

opencv基于混合高斯模型的图像分割的更多相关文章

  1. sklearn聚类模型:基于密度的DBSCAN;基于混合高斯模型的GMM

    1 sklearn聚类方法详解 2 对比不同聚类算法在不同数据集上的表现 3 用scikit-learn学习K-Means聚类 4 用scikit-learn学习DBSCAN聚类 (基于密度的聚类) ...

  2. 混合高斯模型:opencv中MOG2的代码结构梳理

    /* 头文件:OurGaussmix2.h */ #include "opencv2/core/core.hpp" #include <list> #include&q ...

  3. Opencv混合高斯模型前景分离

    #include "stdio.h" #include "string.h" #include "iostream" #include &q ...

  4. OpenCV混合高斯模型函数注释说明

    OpenCV混合高斯模型函数注释说明 一.cvaux.h #define CV_BGFG_MOG_MAX_NGAUSSIANS 500 //高斯背景检测算法的默认参数设置 #define CV_BGF ...

  5. PRML读书会第九章 Mixture Models and EM(Kmeans,混合高斯模型,Expectation Maximization)

    主讲人 网络上的尼采 (新浪微博: @Nietzsche_复杂网络机器学习) 网络上的尼采(813394698) 9:10:56 今天的主要内容有k-means.混合高斯模型. EM算法.对于k-me ...

  6. [zz] 混合高斯模型 Gaussian Mixture Model

    聚类(1)——混合高斯模型 Gaussian Mixture Model http://blog.csdn.net/jwh_bupt/article/details/7663885 聚类系列: 聚类( ...

  7. 运动检测(前景检测)之(二)混合高斯模型GMM

    运动检测(前景检测)之(二)混合高斯模型GMM zouxy09@qq.com http://blog.csdn.net/zouxy09 因为监控发展的需求,目前前景检测的研究还是很多的,也出现了很多新 ...

  8. 混合高斯模型(GMM)推导及实现

    作者:桂. 时间:2017-03-20  06:20:54 链接:http://www.cnblogs.com/xingshansi/p/6584555.html 声明:欢迎被转载,不过记得注明出处哦 ...

  9. 混合高斯模型(Mixtures of Gaussians)和EM算法

    这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与k-means一样,给定的训练样本是,我们将隐含类别标签用表示 ...

随机推荐

  1. nagios监控系统安装及配置

    Nagios通常由一个主程序(Nagios).一个插件程序(Nagios-plugins)和四个可选的ADDON(NRPE.NSCA.NSClient++和NDOUtils)组成.Ngios的监控工作 ...

  2. 浏览器angent分析工具

    cz.mallat.uasparser.UserAgentInfo info = null; info = uasParser.parse(userAgent);

  3. Android开发环境建立

    一.For windows 7(注:XP会有问题) 1.JDK-Java SE download: http://www.oracle.com/technetwork/java/javase/down ...

  4. lnmp无法删除目录,目录包含.user.ini

    无法删除".user.ini"文件解决方法,运行后删除即可 chattr -i /home/wwwroot/yoursite/.user.ini 如果是需要修改文件,记得修改完以后 ...

  5. code complete part1

    最近在看code complete,学习了一些东西,作为点滴,记录下来. 关于类: 类的接口抽象应该一致 类的接口要可编程,不要对类的使用者做过多的假设.不要出现类似于:A的输入量一定要大于多少小于多 ...

  6. 在Visual Studio中设置多核并行编译

    VS是一款非常强大实用的IDE,是在Windows环境下学习编程的首选软件. 有些时候大一点的工程项目编译要耗时挺长时间,随便修改一下代码就可能要编译将近一分钟,甚至更多.即便在开启的增量编译的情况下 ...

  7. vim下打造python编辑器

    在前面文章中介绍的关于vim基础插件之上加上一款专门为读写python程序的插件-Python-mode. 顾名思义,就是让vim在python模式下运行.这里介绍这款插件的功能以及如何使用. 本文主 ...

  8. JMeter Webservice测试计划

    一.新建测试计划:HelloWorld测试计划 二.添加线程组 编辑线程组属性: 三.添加 SOAP/ XML-RPC 请求元素 四.填入url地址及请求报文 此处的请求报文,是用soapUI生成的, ...

  9. [综] Sparse Representation 稀疏表示 压缩感知

    稀疏表示 分为 2个过程:1. 获得字典(训练优化字典:直接给出字典),其中字典学习又分为2个步骤:Sparse Coding和Dictionary Update:2. 用得到超完备字典后,对测试数据 ...

  10. ios7 ios8 cell中下划线偏移(separator Insets)处理方法

    在ios7中,UITableViewCell左侧会有默认15像素的空白.这时候,设置setSeparatorInset:UIEdgeInsetsZero 能将空白去掉. 但是在ios8中,设置setS ...