层次聚类.zip
层次聚类.zip
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-04-22 17:19 层次聚类
目录 0 2018-04-20 10:33 层次聚类.vs
目录 0 2018-04-20 10:33 层次聚类.vs层次聚类
目录 0 2018-04-20 10:33 层次聚类.vs层次聚类v14
文件 19456 2018-04-22 17:19 层次聚类.vs层次聚类v14.suo
目录 0 2018-04-20 13:17 层次聚类Debug
目录 0 2018-04-22 15:52 层次聚类层次聚类
文件 19595264 2018-04-22 17:19 层次聚类层次聚类.sdf
文件 1318 2018-04-20 10:33 层次聚类层次聚类.sln
目录 0 2018-04-20 13:17 层次聚类层次聚类Debug
目录 0 2018-04-20 13:17 层次聚类层次聚类Debug层次聚类.tlog
文件 7381 2018-04-22 11:25 层次聚类层次聚类层次聚类.vcxproj
文件 944 2018-04-22 11:25 层次聚类层次聚类层次聚类.vcxproj.filters
文件 2471 2018-04-22 15:52 层次聚类层次聚类源.cpp
#include
#include
#include
#include
using namespace cv;
using namespace std;
class center //聚类中心点
{
public:
int center_r;
int center_g;
int center_b;
int center_num; //此类的像元个数
center()
{
center_r = 0; center_g = 0; center_b = 0;
}
};
int num = 3; //聚类数目
int main()
{
//显示RGB图像并显示
IplImage* rgb = cvLoadImage(“1.jpg“ 1);
std::cout << “图片高像素:“ << rgb->height << endl; //33
std::cout << “图片宽像素“ << rgb->width << endl; //50
cvNamedWindow(“RGB“ WINDOW_NORMAL);
cvShowImage(“RGB“ rgb);
//int **type = new int *[rgb->height];
//for (int i = 0; i < rgb->height; i++)
// type[i] = new int[rgb->width];
int height = 33;
int width = 50;
//图像转换:RGB对应三个二维矩阵
double ** r = new double *[33]; //红波段
for (int i = 0; i < 33; i++)
r[i] = new double[50];
double ** g = new double *[33]; //绿波段
for (int i = 0; i < 33; i++)
g[i] = new double[50];
double ** b = new double *[33]; //蓝波段
for (int i = 0; i < 33; i++)
b[i] = new double[50];
//获取图像的颜色值
for (int i = 0; i < 33; i++)
{
for (int j = 0; j < 50; j++)
{
CvScalar s = cvGet2D(rgb i j); //i代表y轴,即height;j代表x轴,即width
b[i][j] = s.val[0]; //将颜色值导入矩阵
g[i][j] = s.val[1];
r[i][j] = s.val[2];
}
}
//将每一个像元存为一个类
center lei[1650];
int k = 0;
for (int i = 0; i < 33; i++)
{
for (int j = 0; j < 50; j++)
{
lei[k].center_r = r[i][j];
lei[k].center_g = g[i][j];
lei[k].center_b = b[i][j];
lei[k].center_num = 1;
k++;
}
}
int dis;//欧氏距离的平方
int tmpr tmpg tmpb;
int tmpi = 0;
int tmpj = 0;
int centernum = 1650; //现在分成多少类
while (centernum > num)
{
int distmp = 300000;
for (int i = 0; i < 1650; i++)//找出类间最短距离
{
for (int j = i + 1; j < 1650; j++)
{
tmpr = (lei[i].center_r - lei[j].center_r)*(lei[i].center_r - lei[j].center_r);
tmpg = (lei[i].center_g - lei[j].center_g)*(lei[i].center_g - lei[j].center_g);
tmpb = (lei[i].center_b - lei[j].center_b)*(lei[i].center_b - lei[j].center_b);
dis = tmpr + tmpg + tmpb;
if (dis < distmp)
{
distmp = dis;
tmpi = i;
tmpj = j;
}
}
}
//合并距离最短的两个类
for (int i = 0;i<)
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-04-22 17:19 层次聚类
目录 0 2018-04-20 10:33 层次聚类.vs
目录 0 2018-04-20 10:33 层次聚类.vs层次聚类
目录 0 2018-04-20 10:33 层次聚类.vs层次聚类v14
文件 19456 2018-04-22 17:19 层次聚类.vs层次聚类v14.suo
目录 0 2018-04-20 13:17 层次聚类Debug
目录 0 2018-04-22 15:52 层次聚类层次聚类
文件 19595264 2018-04-22 17:19 层次聚类层次聚类.sdf
文件 1318 2018-04-20 10:33 层次聚类层次聚类.sln
目录 0 2018-04-20 13:17 层次聚类层次聚类Debug
目录 0 2018-04-20 13:17 层次聚类层次聚类Debug层次聚类.tlog
文件 7381 2018-04-22 11:25 层次聚类层次聚类层次聚类.vcxproj
文件 944 2018-04-22 11:25 层次聚类层次聚类层次聚类.vcxproj.filters
文件 2471 2018-04-22 15:52 层次聚类层次聚类源.cpp
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)