2013年全国数学建模大赛获奖论文碎纸片的拼接复原 - 图文(8)

2019-08-03 14:46

} }

附录3:拼接过程中程序直接输出的某些中间图片

附录4:

#include #include #include #include #include #include

#define WIDTHBYTES(bits) (((bits)+31)/32*4) typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; typedef long LONG;

unsigned int zuoshuzu[418][100];

34

unsigned int youshuzu[418][100]; unsigned int shangshuzu[418][100]; unsigned int xiashuzu[418][100]; unsigned int noshang[100]; unsigned int noxia[100]; unsigned int nozuo[100]; unsigned int noyou[100]; unsigned int nozuoshang[50];

unsigned int nozuoshanglink[50][100]; unsigned int shangcizuo; unsigned int shangciyou; unsigned int shangcishang; unsigned int shangcixia; unsigned int * zuozhizhen; unsigned int * youzhizhen; unsigned int zuocnt; unsigned int youcnt; unsigned int shangcnt; unsigned int xiacnt; FILE * put; FILE * outzuo; FILE * outyou;

//位图文件头信息结构定义

//其中不包含文件类型信息(由于结构体的内存结构决定,要是加了的话将不能正确读取文件信息) typedef struct tagBITMAPFILEHEADER { DWORD bfSize; //文件大小

WORD bfReserved1; //保留字,不考虑 WORD bfReserved2; //保留字,同上

DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和 } BITMAPFILEHEADER;

//信息头BITMAPINFOHEADER,也是一个结构,其定义如下: typedef struct tagBITMAPINFOHEADER{ //public:

DWORD biSize; //指定此结构体的长度,为40 LONG biWidth; //位图宽 LONG biHeight; //位图高

WORD biPlanes; //平面数,为1

WORD biBitCount; //采用颜色位数,可以是1,2,4,8,16,24,新的可以是32 DWORD biCompression; //压缩方式,可以是0,1,2,其中0表示不压缩 DWORD biSizeImage; //实际位图数据占用的字节数 LONG biXPelsPerMeter; //X方向分辨率 LONG biYPelsPerMeter; //Y方向分辨率

DWORD biClrUsed; //使用的颜色数,如果为0,则表示默认值(2^颜色位数) DWORD biClrImportant; //重要颜色数,如果为0,则表示所有颜色都是重要的 } BITMAPINFOHEADER;

//调色板Palette,当然,这里是对那些需要调色板的位图文件而言的。24位和32位是不需要调色板的。

//(似乎是调色板结构体个数等于使用的颜色数。) typedef struct tagRGBQUAD { //public: BYTE rgbBlue; //该颜色的蓝色分量 BYTE rgbGreen; //该颜色的绿色分量

35

BYTE rgbRed; //该颜色的红色分量 BYTE rgbReserved; //保留值 } RGBQUAD;

BITMAPFILEHEADER bitHead; BITMAPINFOHEADER bitInfoHead; FILE* pfile;

char strFilea[209][50] = {

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\char strFileb[209][50] = {

\\\\\\\\\\\\\\

36

\\\\\\\\\\\\\\\\\\\\\

void initfile(char * strFil,unsigned int * zuo,unsigned int * you,unsigned int * shang,unsigned int * xia){ //printf(\ //scanf(\ shangcishang = shangcixia = shangcizuo = shangciyou = shangcnt = xiacnt = zuocnt = youcnt = 0; pfile = fopen(strFil,\打开文件 put = fopen(\ outzuo = fopen(\ outyou = fopen(\ if(pfile!=NULL){ //printf(\读取位图文件头信息 WORD fileType; fread(&fileType,1,sizeof(WORD),pfile); if(fileType != 0x4d42){ printf(\ getchar(); return; } fread(&bitHead,1,sizeof(tagBITMAPFILEHEADER),pfile); fread(&bitInfoHead,1,sizeof(BITMAPINFOHEADER),pfile); } else{ printf(\ getchar(); return; } tagRGBQUAD *pRgb ; if(bitInfoHead.biBitCount < 24){ long nPlantNum = long(pow(2,double(bitInfoHead.biBitCount))); // Mix color Plant Number; pRgb=(tagRGBQUAD *)malloc(nPlantNum*sizeof(tagRGBQUAD)); memset(pRgb,0,nPlantNum*sizeof(tagRGBQUAD)); int num = fread(pRgb,4,nPlantNum,pfile); } int width = bitInfoHead.biWidth; int height = bitInfoHead.biHeight;//分配内存空间把源图存入内存 int l_width = WIDTHBYTES(width* bitInfoHead.biBitCount);//计算位图的实际宽度并确保它为32的倍数

37

BYTE *pColorData=(BYTE *)malloc(height*l_width); memset(pColorData,0,height*l_width); long nData = height*l_width;//把位图数据信息读到数组里 fread(pColorData,1,nData,pfile);//将位图数据转化为RGB数据 tagRGBQUAD* dataOfBmp; dataOfBmp = (tagRGBQUAD *)malloc(width*height*sizeof(tagRGBQUAD));//用于保存各像素对应的RGB数据 memset(dataOfBmp,0,width*height*sizeof(tagRGBQUAD)); if(bitInfoHead.biBitCount<24){ int k; int index = 0; if (bitInfoHead.biBitCount == 1){ for(int i=0;i>7; break; case 1: mixIndex = mixIndex<<6; mixIndex = mixIndex>>7; break; case 2: mixIndex = mixIndex<<5; mixIndex = mixIndex>>7; break; case 3: mixIndex = mixIndex<<4; mixIndex = mixIndex>>7; break; case 4: mixIndex = mixIndex<<3; mixIndex = mixIndex>>7; break; case 5: mixIndex = mixIndex<<2; mixIndex = mixIndex>>7; break; case 6: mixIndex = mixIndex<<1; mixIndex = mixIndex>>7; break; case 7: mixIndex = mixIndex>>7; break; } //将像素数据保存到数组中对应的位置 dataOfBmp[index].rgbRed = pRgb[mixIndex].rgbRed; dataOfBmp[index].rgbGreen = pRgb[mixIndex].rgbGreen; dataOfBmp[index].rgbBlue = pRgb[mixIndex].rgbBlue; dataOfBmp[index].rgbReserved = pRgb[mixIndex].rgbReserved; index++;

38


2013年全国数学建模大赛获奖论文碎纸片的拼接复原 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:郑大远程教育《大学英语I》第09章在线测试

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: