• 大小: 6.06M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-14
  • 语言: 其他
  • 标签: 其他  

资源简介

层次聚类.zip

资源截图

代码片段和文件信息

#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

评论

共有 条评论