#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. wordpress(三)wordpress手动更新

    第一:备份数据库还有文件 第二:从WP中文官网下载最新版WordPress,下载完毕解压到你电脑上. 第三:删除博客主机上的wp-includes和wp-admin目录. 第四:将解压在本地电脑的wo ...

  2. 2016HUAS_ACM暑假集训4A - 递推

    利用组合公式C(n,m)=C(n-1,m)+C(n-1,m-1).也就是从n个数里面选择m个数.按递增方式放在每一层循环. 杨辉三角+二项式定理,还真是挺有“意思”的一道题.说实话,非原创.见谅... ...

  3. Linux makefile 教程 非常详细,且易懂

    最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...

  4. golang: 根据json生成go源文件

    https://github.com/ChimeraCoder/gojson $ git clone https://github.com/ChimeraCoder/gojson.git$ cd go ...

  5. MYCAT介绍(转)

    从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个M ...

  6. java1234教程系列笔记 S1 Java SE chapter 02 写乘法口诀表

    一.水仙花数 1.方式一:这是我的思路,取各个位数的方式.我个人习惯于使用取模运算. public static List<Integer> dealNarcissiticNumberMe ...

  7. 学习笔记之vector向量容器

    今天复习到vector向量容器,里面包括vector向量容器的一些优点以及具体的使用方法及代码,分享给大家. Vector向量容器不但能够像数组一样对元素进行随机访问,还可以在尾部插入元素,是一种简单 ...

  8. myeclipse构建webservice项目

    新建server端 1 创建Web Service Project项目 2.项目名称:HelloWorldServer 3.创建接口类 4.发布 选择项目名称,选择从Java类中构建web servi ...

  9. win10怎么取消登录密码

    win10安装后每次登录都需要输入密码,挺烦的,查了下,原来windows10无密码登录设置挺方便. 1. 按下win+x组合键,如下图所示 2. 在弹出菜单选择运行,如下图所示 或者直接按win+r ...

  10. jquery 获取元素在浏览器中的绝对位置

    代码详解 1,获取对象(自定义调整打开新窗口参照元素) var obj = $("#oButton"); 实例中我获取的对象是弹出窗口按钮,这样创建的新窗口就会根椐按钮的位置进行调 ...