纯c语言怎么把存放在二维数组的二值化图像去除较小的连通域?
#include <stdio.h>#include <stdlib.h>#include <conio.h>#define ONE 255#define ZERO 0/*typedef struct tagBITMAPFILEHEADER { // bmfhword bfType;Dword bfSize;WORD bfReserved1;WORD bfReserved2;DWORD bfOffBits;} BITMAPFILEHEADER;typedef struct tagBITMAPINFOHEADER{ // bmihDWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCountDWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant;} BITMAPINFOHEADER;*/void main (int argc,char *argv[]){FILE *fi,*fo;//I/O filechar fin[80],fon[80];//I/O file nameunsigned char **ri,**ro;unsigned char buff;long w,h;int t;int i,j;if(argc<3){printf("orginfile name:");scanf("%s",fin);printf("resultfile name:");scanf("%s",fon);}else{sscanf(argv[1],"%s",fin);sscanf(argv[2],"%s",fon);}if(argc==4)sscanf(argv[4],"%d",&t);else{printf("theshold [0,255]:");scanf("%d",&t);}if (((fi=fopen(fin,"rb"))==NULL)||((fo=fopen(fon,"wb"))==NULL)){puts(" file open failed");return;}fseek(fi,18L,SEEK_SET);fread(&w,sizeof(long),1,fi);fread(&h,sizeof(long),1,fi);fseek(fi,0L,SEEK_SET);ri=(unsigned char **)malloc(sizeof(unsigned *)*h);for (i=0;i<h;i++)*(ri+i)=(unsigned char *)malloc(sizeof(unsigned)*w);ro=(unsigned char **)malloc(sizeof(unsigned *)*h);for (i=0;i<h;i++)*(ro+i)=(unsigned char *)malloc(sizeof(unsigned)*w);//分配失败后果自负!for (i=0;i<32;i++){fread(&buff,sizeof(buff),1,fi);fwrite(&buff,sizeof(buff),1,fo);}for (i=0;i<h;i++)for (j=0;j<w;j++)fread(*(ri+i)+j,sizeof(unsigned char),1,fi);for (i=0;i<h;i++)for (j=0;j<w;j++)*(*(ro+i)+j)=((*(*(ri+i)+j)<=t)?ZERO:ONE);for (i=0;i<h;i++)for (j=0;j<w;j++)fwrite(*(ro+i)+j,sizeof(unsigned char),1,fo);fclose(fo);}