资源简介
利用遥感的K均值分类方法进行bmp图像的分类.
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#define NUM 2000000
unsigned char *pBmpBuf;//读入图像数据的指针
unsigned char *pBmpbiao;//读入颜色表的指针
class RGB
{
public:
int R;
int G;
int B;
int f;
};
class BIAO
{
public:
int R;
int G;
int B;
int f;
};
int bmpWidth;//图像的宽
int bmpHeight;//图像的高
RGBQUAD *pColorTable;//颜色表指针
int biBitCount;//图像类型,每像素位数
//-------------------------------------------------------------------------------------------
//读图像的位图数据、宽、高、颜色表及每像素位数等数据进内存,存放在相应的全局变量中
bool readBmp(char *bmpName)
{
FILE *fp=fopen(bmpName“rb“);//二进制读方式打开指定的图像文件
if(fp==0) return 0;
//跳过位图文件头结构BITMAPFILEHEADER
fseek(fp sizeof(BITMAPFILEHEADER)0);
//定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中
BITMAPINFOHEADER head;
fread(&head sizeof(BITMAPINFOHEADER) 1fp); //获取图像宽、高、每像素所占位数等信息
bmpWidth = head.biWidth;
bmpHeight = head.biHeight;
biBitCount = head.biBitCount;//定义变量,计算图像每行像素所占的字节数(必须是4的倍数)
int lineByte=(bmpWidth * biBitCount/8+3)/4*4;
if(biBitCount==8)
{
pBmpbiao=new unsigned char[1024];
fread(pBmpbiao11024fp);
}
//申请位图数据所需要的空间,读位图数据进内存
pBmpBuf=new unsigned char[lineByte * bmpHeight];
fread(pBmpBuf1lineByte * bmpHeightfp);
fclose(fp);//关闭文件
return 1;//读取文件成功
}
int findmin(double a[]int length)
{
int t=0;
int q;
double min=0;
min = a[0];
for (q=0;q {
if (min > a[q])
{
min = a[q];
t=q;
}
}
return t;
}
//----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
//给定一个图像位图数据、宽、高、颜色表指针及每像素信息进行分类,将其写到指定文件中
void main()
{
//读入指定BMP文件进内存
RGB rgb[2500000];
RGB center[50];
RGB other[50];
BIAO biao[256];
int dian[50];
int hei[2500000];
int num[50];
int jiunum[50];
int h;
int dei;
double yu;
int jump;
int cishu=0;
double abc[50];
char readPath[]=“nv.BMP“;
readBmp(readPath);
//输出图像的信息
cout<<“width=“<
//每行字节数
int lineByte=(bmpWidth*biBitCount/8+3)/4*4;
int nlineByte=(bmpWidth*3+3)/4*4;
int m=0n=0ge=0;
if(biBitCount==8)
{//图像
for(int ca=0;ca<256;ca++)
{
biao[ge].R=*(pBmpbiao+ca*4);
biao[ge].G=*(pBmpbiao+ca*4+1);
biao[ge].B=*(pBmpbiao+ca*4+2);
biao[ge].f=*(pBmpbiao+ca*4+3);
ge++;
}
for(int ii=0;ii {
for(int jj=0;jj {
hei[n]=*(pBmpBuf+ii*lineByte+jj);
n++;
}
}
for(int shu=0;shu {
rgb[shu].R=biao[hei
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10267 2011-03-05 19:04 K均值分类\遥感K均值分类\bmp123.cpp
文件 3447 2011-05-15 22:34 K均值分类\遥感K均值分类\bmp123.dsp
文件 537 2011-05-15 22:33 K均值分类\遥感K均值分类\bmp123.dsw
文件 41984 2011-05-15 22:34 K均值分类\遥感K均值分类\bmp123.ncb
文件 53760 2011-05-15 22:34 K均值分类\遥感K均值分类\bmp123.opt
文件 246 2011-05-15 22:34 K均值分类\遥感K均值分类\bmp123.plg
文件 258160 2011-05-15 22:32 K均值分类\遥感K均值分类\Debug\bmp123.exe
文件 296060 2011-05-15 22:32 K均值分类\遥感K均值分类\Debug\bmp123.ilk
文件 28331 2011-05-15 22:32 K均值分类\遥感K均值分类\Debug\bmp123.obj
I.A.... 3698368 2011-05-15 22:32 K均值分类\遥感K均值分类\Debug\bmp123.pch
文件 517120 2011-05-15 22:32 K均值分类\遥感K均值分类\Debug\bmp123.pdb
文件 164864 2011-05-15 22:34 K均值分类\遥感K均值分类\Debug\vc60.idb
文件 94208 2011-05-15 22:32 K均值分类\遥感K均值分类\Debug\vc60.pdb
文件 768054 2011-01-09 09:13 K均值分类\遥感K均值分类\nv.bmp
文件 110592 2011-05-15 22:37 K均值分类\遥感K均值分类\程序说明.doc
目录 0 2011-05-15 22:32 K均值分类\遥感K均值分类\Debug
目录 0 2011-05-15 22:38 K均值分类\遥感K均值分类
目录 0 2011-05-15 22:32 K均值分类
----------- --------- ---------- ----- ----
6045998 18
评论
共有 条评论