资源简介
模糊C均值的C++实现,有很详细的代码解释,运行需要配置OpenCV340,各种踩坑,希望大家学习愉快,附带理论地址,代码配合公式能够更好的学习哦https://blog.csdn.net/qq_41828351/article/details/88402605
代码片段和文件信息
// FCM.cpp : 此文件包含 “main“ 函数。程序执行将在此处开始并结束。
//
#include “pch.h“
#include
#include
void myFCMeans(float* pSamples int* pClusterResult int clusterNum int sampleNum int featureNum int m_Value);
int main()
{
#define MAX_CLUSTERS 5
//CvScalar color_tab[MAX_CLUSTERS];
cv::Scalar color_tab[MAX_CLUSTERS];
IplImage* img = cvCreateImage(cvSize(500 500) IPL_DEPTH_8U 3);
CvRNG rng = cvRNG(cvGetTickCount());
cv::Point ipt;
//color_tab[0] = CV_RGB(255 0 0);
color_tab[0] = cv::Scalar(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);
int i k;
int clusterNum = cvRandInt(&rng) % MAX_CLUSTERS + 2; //至少有两类
int sampleNum = cvRandInt(&rng) % 1000 + 100; //至少100个点
int feaNum = 2; //特征维度
CvMat* sampleMat = cvCreateMat(sampleNum 1 CV_32FC2);
/* generate random sample from multigaussian distribution */
//产生高斯随机数
//随机生成样本多元高斯分布
//样本总数为sample_count 类别总数为cluster_count
//样本矩阵为points先按类别分成cluster_count份 每一份数据的个数为sample_count/cluster_count
//然后按类别随机矩阵填充样本矩阵第一类填充矩阵的0~sample_count/cluster_count行
//第二类填充样本矩阵的sample_count/cluster_count~sample_count/cluster_count*2行以此类推直到填充满所有矩阵每一类的样本个数是一样的
for (k = 0; k < clusterNum; k++)
{
CvPoint center;
int topIndex = k * sampleNum / clusterNum; //填充的索引
int bottomIndex = (k == clusterNum - 1 ? sampleNum : (k + 1)*sampleNum / clusterNum);
CvMat* localMat = cvCreateMatHeader(bottomIndex - topIndex 1 CV_32FC2);
center.x = cvRandInt(&rng) % img->width;
center.y = cvRandInt(&rng) % img->height;
//返回数组在一定跨度的行
//points为输入数组point_chunk返回数组
//开始行为k*sample_count/cluster_count
//结束行为 当k== cluster-1时 为 第samplecount行 否则为(k+1)*sample_count/cluster_count
cvGetRows(sampleMat localMat topIndex bottomIndex 1); //此函数不会给localMat分配空间不包含bottomIndex,其实localMat已经和得到的几行数据进行了绑定
//point_chunk输出数组CV_RAND_NORMAL分布类型为正态分布或者高斯分布
//cvScalar(center.xcenter.y00)随机数的平均值
// cvScalar(img->width/6img->height/600)如果是正态分布它是随机数的标准差
cvRandArr(&rng localMat CV_RAND_NORMAL
cvScalar(center.x center.y 0 0)
cvScalar(img->width*0.1 img->height*0.1 0 0)); //在这里随机就相当于在给sampleMat赋值
}
// shuffle samples 混乱数据
for (i = 0; i < sampleNum / 2; i++)
{
CvPoint2D32f* pt1 = (CvPoint2D32f*)sampleMat->data.fl + cvRandInt(&rng) % sampleNum;
CvPoint2D32f* pt2 = (CvPoint2D32f*)sampleMat->data.fl + cvRandInt(&rng) % sampleNum;
CvPoint2D32f temp;
CV_SWAP(*pt1 *pt2 temp);
}
float* pSamples = new float[sampleNum * feaNum]; //大小等于特征维度乘以样本数
int* pClusters = new int[sampleNum];
for (i = 0; i < sampleNum; i++)
{
//feaNum=2 将二维数据作为数据集
pSamples[i*feaNum] = (cvGet2D(sampleMat i 0)).val[0];
pSamples[i*feaNum + 1] = (cvGet2D(sampleMat i 0)).val[1];
}
cvReleaseMat(&sampleMat); //数据集制作完毕,释放内存
cvZero(img); //初始化图片
for (i = 0; i < sampleNum; i++)
{
//fe
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-03-05 16:28 FCM\.vs\
目录 0 2019-03-05 16:28 FCM\.vs\FCM\
目录 0 2019-03-11 16:18 FCM\.vs\FCM\v15\
文件 26624 2019-03-11 16:18 FCM\.vs\FCM\v15\.suo
文件 22171648 2019-03-11 16:18 FCM\.vs\FCM\v15\Browse.VC.db
目录 0 2019-03-05 20:53 FCM\.vs\FCM\v15\ipch\
文件 327680 2019-03-05 16:28 FCM\.vs\FCM\v15\ipch\29c714a186fa55df.ipch
目录 0 2019-03-07 15:40 FCM\.vs\FCM\v15\ipch\AutoPCH\
文件 327680 2019-03-11 16:18 FCM\.vs\FCM\v15\ipch\cfd589cfd835b35a.ipch
文件 1422 2019-03-05 16:28 FCM\FCM.sln
目录 0 2019-03-07 14:42 FCM\FCM\
文件 32356 2019-03-06 14:56 FCM\FCM\clusters.jpg
文件 10378 2019-03-07 14:42 FCM\FCM\FCM.cpp
文件 8538 2019-03-05 16:31 FCM\FCM\FCM.vcxproj
文件 1151 2019-03-05 16:28 FCM\FCM\FCM.vcxproj.filters
文件 165 2019-03-05 16:28 FCM\FCM\FCM.vcxproj.user
文件 28914 2019-03-11 16:18 FCM\FCM\origin.jpg
文件 200 2019-03-05 16:28 FCM\FCM\pch.cpp
文件 639 2019-03-05 16:28 FCM\FCM\pch.h
目录 0 2019-03-05 16:31 FCM\FCM\x64\
目录 0 2019-03-11 16:17 FCM\FCM\x64\Debug\
文件 613 2019-03-11 16:17 FCM\FCM\x64\Debug\FCM.log
文件 437079 2019-03-11 16:17 FCM\FCM\x64\Debug\FCM.obj
文件 2031616 2019-03-05 16:31 FCM\FCM\x64\Debug\FCM.pch
目录 0 2019-03-11 16:17 FCM\FCM\x64\Debug\FCM.tlog\
文件 1490 2019-03-11 16:17 FCM\FCM\x64\Debug\FCM.tlog\CL.command.1.tlog
文件 30106 2019-03-11 16:17 FCM\FCM\x64\Debug\FCM.tlog\CL.read.1.tlog
文件 990 2019-03-11 16:17 FCM\FCM\x64\Debug\FCM.tlog\CL.write.1.tlog
文件 206 2019-03-11 16:17 FCM\FCM\x64\Debug\FCM.tlog\FCM.lastbuildstate
文件 1330 2019-03-11 16:17 FCM\FCM\x64\Debug\FCM.tlog\li
文件 2644 2019-03-11 16:17 FCM\FCM\x64\Debug\FCM.tlog\li
............此处省略9个文件信息
- 上一篇:vc++2008Redist安装包
- 下一篇:VS平台 图像边缘检测
相关资源
- vc++2008Redist安装包
- 回合制游戏c++源代码
- C++ 生成Delaunay三角网
- C#/C++麦克风插拔检测
- SNL语言编译器GUI VC++ 2008版 MFC实现可
- 数据结构C++语言描述--应用标准模板库
- Essential C++中文版.pdf
- C++实现端口扫描
- c++ 俄罗斯方块( + 文档)
- Numerical Recipes 3rd英文版,有C++、Fort
- Sahni著《数据结构算法与应用——C+
- C++编程惯用法——高级程序员常用方
- ACIS--CAD开发类库4
- 郑丽的C++学生用书
- 用C++使用SDL库编写的俄罗斯方块游戏
- 简单画图软件c++
- 拓扑排序与关键路径(C++版)
- 21天学通 C++第8版 超清版完整带书签
- libstdc++.so.6.0.21
- C++获取电脑CPU序列号及硬盘序列号
- 软件工程选课系统含代码,执行文件
- 计算机网络课程设计之Ping程序含C++原
- 基于c++和winsocket的局域网聊天源代码
- 穿线法识别数码管数字c++
- 数据结构 图的最小生成树 C++描述 使
- 模拟字典小程序c++实现
- 足球俱乐部管理系统——北邮c++2课程
- QT小项目-电子词典
- c++高校工资管理系统
- C++ 双缓存机制播放音频流(PCM裸流)
评论
共有 条评论