📄 main.cpp
字号:
#include "stdafx.h"
#include "bmpfile.h"
#include <iostream.h>
#include <string.h>
#include <malloc.h>
#include <math.h>
typedef struct{
int data;
int weight;
}ElemType; //data:灰度值 weight:相同灰度值的个数
typedef struct{
int parent;
int lchild;
int rchild;
}SFNode,*SFTree;
void BubbleSort(ElemType a[],int n)
{
int i,j;
ElemType temp;
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
{
if(a[j].weight<a[j+1].weight)
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
int mm(ElemType *e,int n)//返回相差最小处的下标
{
int i,min,x=0,total=0;
int *a=(int *)malloc((n/2)*sizeof(int));
int *b=(int *)malloc((n/2)*sizeof(int));
for(i=0;i<n;i++)
total+=e[i].weight;
a[0]=e[0].weight;
b[0]=abs(2*a[0]-total);
for(i=1;i<n/2;i++)
{
a[i]=a[i-1]+e[i].weight;
b[i]=abs(2*a[i]-total);
}
min=b[0];
for(i=1;i<n/2;i++)
{
if(b[i]<min)
{
min=b[i];
x=i;
}
}
return x;
}
void main()
{
FILE *f;
int i,j;
HXLBMPFILE bmpfile;
if(!bmpfile.LoadBMPFILE("实验图像.bmp")) return;
const int n=256;//总的灰度数
const int total=bmpfile.imageh*bmpfile.imagew;//总的像素点的个数
int H[256];//灰度值为i的像素点的个数为H[i]
memset(H,0,sizeof(int)*256);
for(i=0;i<bmpfile.imageh;i++)
for(j=0;j<bmpfile.imagew;j++)
H[bmpfile.GetByteatH(i)[j]]++;
f=fopen("h.txt","w+t");
if(!f) return;
for(i=0;i<256;i++)
fprintf(f,"%d %d\n",i,H[i]);
fclose(f);
ElemType E[256];//存放按权值从大到小排序后的数据
for(i=0;i<n;i++)
{
E[i].data=i;
E[i].weight=H[i];
}
BubbleSort(E,n);
f=fopen("e.txt","w+t");
if(!f) return;
for(i=0;i<256;i++)
fprintf(f,"%d %d %d\n",i,E[i].data,E[i].weight);
fclose(f);
xx=n;
m=2*n-1;
ElemType *e=E;
SFTree SFT;
SFT=(SFNode *)malloc((m+1)*sizeof(SFNode));//0号单元未用
SFT[1].parent=0;
SFT[1].lchild=0;
SFT[1].rchild=255;
for(i=2;i<=m;i++)
{
xx=mm(e,xx);
SFT[i].parent=0;
SFT[1].lchild=0;
SFT[1].rchild=255;
.........
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -