收藏 分销(赏)

古籍汉字切分研究-大学论文.doc

上传人:可**** 文档编号:2906431 上传时间:2024-06-11 格式:DOC 页数:44 大小:205KB
下载 相关 举报
古籍汉字切分研究-大学论文.doc_第1页
第1页 / 共44页
古籍汉字切分研究-大学论文.doc_第2页
第2页 / 共44页
古籍汉字切分研究-大学论文.doc_第3页
第3页 / 共44页
古籍汉字切分研究-大学论文.doc_第4页
第4页 / 共44页
古籍汉字切分研究-大学论文.doc_第5页
第5页 / 共44页
点击查看更多>>
资源描述

1、“挑战杯”全国大学生课外学术科技作品竞赛 参赛作品 作品名称: 古籍汉字切分研究 学校名称: 河北大学 指导教师: 罗文劼 田学东 项目组成员: 邵建新 聂晓帆 李付民 张瑞文 贺王凯 夏正伟摘要 华夏文明给我们留下了浩如烟海的文献典籍。这些文字历来是众多专家学者研究的对象。自20世纪70年代起,图像分割就以其在图像处理中的重要性受到人们的高度重视,也吸引了很多研究人员为之付出了巨大的努力。近年来,古籍数字化已经取得了令人瞩目的成就,但在为使用者提供快速便捷的检索手段的同时,带来了由于不能接触原典,丧失了接收许多隐性资料机会的缺点。对于原典图片中的每一个字符,都可以采用计算机的手段进行分割、处

2、理。采用这种图像处理和单字分割的手段对古代典籍进行研究,使传统文化的研究步入一个新的阶段。基于这样的研究背景与现状,我们通过C语言实现对古籍汉字的切分功能,具体分为以下三部分: 去噪声。因为古籍资料保存时间久远,所以会出现纸张变色、破损、文字残缺等现象,导致古籍手写汉字图像噪声很大。所以实现图像去噪对于我们后续的分割有着极其重要的作用,是图像分割的前续工作。我们拟用平滑滤波器处理的图像噪声去除技术实现此功能。 图像读写。BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB) 和设备无关位图(DIB),使用非常广。 图像切分。当我们把古籍汉字

3、的BMP文件里面的数据转化成矩阵后,每个像素点转化为一个数字,因为我们处理的是古籍汉字,所以通过去噪等处理后只有黑白两色,继而对文件整体进行检索包括横向和纵向,计算出汉字的平均宽度和平均高度。关键词古籍 去噪声 图像分割 C语言 阈值化一、研究背景几千年辉煌的华夏文明,给我们留下了浩如烟海的文献典籍。这些文字记录、反映了当时社会在文化、政治、军事、学术等各个领域的情况,历来是众多专家学者研究的对象。近年来,古籍数字化已经取得了令人瞩目的成就,但很多古籍的数字化往往只是按照研究者的理解,将古籍文献上的文字逐字转换成电脑能够显示的字符。在为使用者提供快速便捷的检索手段的同时,也带来了由于不能接触原

4、典,丧失了接收许多隐性资料机会的缺点。许多中国古代文献资料兼具文物、文献、文字三方面的研究价值。因此,在提供字符化的古籍信息的同时,应当向研究者提供质量可靠的图片信息,以供对照研究。对于原典图片中的每一个字符,都可以采用计算机的手段进行分割、处理。采用这种图像处理和单字分割的手段对古代典籍进行研究,使传统文化的研究步入一个新的阶段。从一幅文本图像中正确地识别出文字需要经过两个大的步骤:第一步,通过图像处理的各种手段,将单个的文本字符图像从整幅图像中正确地分割出来;第二步,对分割出来的单个文本字符图像进行识别。第一步是第二步的基础,是整个处理流程中非常关键的一步,如果单个字符图像不能进行正确的分

5、割,识别的正确性也就根本无从谈起。单个字符图像的分割主要包括两个环节:图像的预处理和文本的图像切分。图像的预处理包括对原始图像的去噪、倾斜校正和各种滤波处理。如果输入图像是灰度或彩色图像,一般还要进行二值化处理。所谓切分也就是从整幅图像中分割提取出单个字符图像的过程。单个字符图像的分割,即图像的预处理和文本图像切分始终是研究的热点和焦点,它们对于进行正确的单字提取和字符识别都有着重大的影响和使用价值,因此人们一直致力于研究具有良好性质及良好效果的文本图像预处理及单字切分算法。但是,大量研究证明,现有的大多数预处理及单字切分算法多以印刷文本图像为处理对象,在处理古籍手写汉字文本图像时往往效果欠佳

6、。并且对于文本图像而言,算法的理论框架还有待进一步完善。1 二、研究意义图像分割是数字图像处理中的一项关键技术,它使得其后的图像分析,识别等处理阶段所要处理的数据量大大减少,同时又保留有关图像结构特征的信息。由于分割中出现的误差会传播至高层次处理阶段,因此分割的精确程度是至关重要的,多年来一直受到研究人员的高度重视,被认为是计算机视觉中的一个瓶颈。图像分割是一种重要的图像技术,在不同领域中有时也用其它名称:如目标轮廓技术,阈值化技术,图像区分技术,目标检测技术,目标识别技术,目标跟踪技术等,这些技术本身或其核心实际上也就是图像分割技术。图像分割是图像处理、分析的一项基本内容。图像分割的应用非常

7、广泛,几乎出现在有关图像处理的所有领域,并涉及各种类型的图像。图像分割在工业自动化、在线产品检验、生产程控、文件图像处理、遥感图像、保安监视、以及军事、体育、农业工程等方面都有广泛的应用。在各种图像应用中,只要需对图像目标进行提取,测量等都离不开图像分割。图像分割的准确性将直接影响后续任务的有效性,因此图像分割具有十分重要的意义三、研究现状自20世纪70年代起,图像分割就以其在图像处理中的重要性受到人们的高度重视,也吸引了很多研究人员为之付出了巨大的努力。目前已提出如经典的一阶微分法和二阶微分法等许多种分割算法2,但这些算法的抗噪性能比较差,对噪声都比较敏感,甚至会由于图像分割而加强噪声。随着

8、数学和人工智能的发展,近年来出现了一些基于神经网络法、小波变换法、模糊检测法等理论的新的图像分割方法。目前已经发表了很多在图像分割研究方面的文章,并且每年都有新的图像分割方面的文章在一些国际著名的学术期刊上发表简单图像的分割算法也比较简单。复杂图像一般由于图像的灰度层次比较丰富,因而会包含较多的区域类数。所以其分割算法也比较复杂。但简单图像分割算法常常是复杂图像分割算法的基础。目前,研究者们将许多种理论应用到了图像分割中,提出了各种各样的算法。如:基于神经网络的分割算法34、基于偏微分方程的分割算法5、基于聚类分析的分割算法、基于图论的分割算法6,基于模糊集合理论的分割算法7-9、基于信息测度

9、的分割算法等等10。图像分割方法根据图像信息的不同可以分为阈值分割方法、区域提取方法和边缘检测方法三大类。四、论文的主要工作本文从手写汉字图像的角度出发,在深入研究手写汉字特性的基础上,对手写汉字图像分割理论和方法展开了深入的研究。主要工作体现在以下几个方面:指出了图像分割及对古籍进行图像处理和汉字分割的意义;讨论了彩色图像分割的基本方法;指出了传统方法在手写汉字图像分割中应用的情况;分析了图像分割问题固有的复杂性,指出传统方法在手写汉字图像、彩色手写汉字图像分割中的局限性。针对传统阈值法的缺点,提出了基于二次类间方差阈值法的手写汉字图像分割算法。整体阈值法未能考虑到局部图像的具体情况,对处理

10、复杂背景图像的二值化时具有一定的局限性。采用局部阈值法对图像进行处理,在某些局部位置优于全局阈值法,而在另外一些局部情况可能会恶化。本文所提出的整体阈值与局部阈值相结合的二次OTSU算法在克服了以上两种算法的缺点的同时,继承了以上两种算法的优点,既考虑到了局部图像的特殊性,也兼顾了整个图像的整体性。通过实验证明,这种方法很好地将全局阂值的概括性与局部阈值的针对性结合了起来,能够取得明显优于原来两种算法的处理结果,这给后续的字符切分打下了良好的基础。提出了非递归的快速算法,进行二值图像的连通域标记。在模式识别等许多图像处理应用中,灰度图像转换为二值图像后,经常要对不同的连通区域进行标记,单独分析

11、这些区域各自的特点,或分析这些区域相互之间的关系,以便进行下一步的处理。本文提出的标记算法仅对图像进行一次扫描,在扫描过程中分析目标像素点邻域像素的情况,当遇到向上分叉需要进行连通域的合并时,配合本文中设计的数据结构进行连通域的合并。在扫描过程中已扫描部分图像的连通域已经生成。非递归连通域标记算法对于简单图像、一次分叉图像、多次分又图像、连通域相互包含或交叉的图像,都可以正确地进行连通域的标记处理。基于此非递归快速连通域标记算法,在总结已有的去噪、去边框、单字分割算法的基础上,设计了去噪、去边框及单字分割算法。分析了基于偏微分方程的目标轮廓提取理论的原理,相关方法的分类,有关模型的数值实现方法

12、。理论上分析了基于最小作用曲面及图像二分法的封闭轮廓曲线提取方法的算法复杂性。分析了目标轮廓能量全局最小主动轮廓模型存在着的自身无法克服的缺点。由于只需要对一块块的小图而不需要对整个一幅大图进行主动轮廓模型算法的处理,在保持了主动轮廓模型优势的同时,极大地提高了运算速度。对本文提出的各种手写汉字图像分割算法进行了分析和综合,设计出了对手写汉字图像进行分割处理的完整的算法流程。对灰度化的手写汉字图像采用二次OTSU算法,对整幅图像进行二值化处理。接着采用非递归快速连通域算法,标记出图像的连通域情况。根据手写汉字的特点,进行去边框、去噪及单个汉字的分割操作。根据连通域情况初步分割出单个汉字后,再从

13、原灰度图像中的对应位置取出小图像,采用OTSU算法进行二值化,以避免由于一个汉字处于不同区13域采用不同阈值造成的差异。对以此方法得到的二值化图像进行轮廓标记。对每个单个汉字的原图像区域,以刚得到的轮廓为窄带划分的依据,采用前述的窄带CV算法,进行汉字图像的细致分割。五、项目的科学性、先进性及独特之处科学性在于,本作品首先通过扫描古籍资料的图文,获取研究样张,然后对样张进行切割算法的研究,然后再对切割的图片进行合理的重组,使得其信息清晰地显示出来。先进性,本作品能够对一些考古等一类活动涉及到的古书籍所记载信息快速高效显示出来,能够大大减少对此类物品研究的时间,从而提高工作效率。独特之处:通过通

14、过对性能稳定的切分算法的设计,力图得到对古籍汉字较好的切分效果,以支持对古书籍字识别的研究。正文1基于平滑滤波器处理的图像噪声去除技术1.1 图像文本去噪声的意义因为古籍资料保存时间久远,所以会出现纸张变色、破损、文字残缺等现象,导致古籍手写汉字图像噪声很大,很多古籍的数字化往往只是按照研究者的理解,有时候会很难展现作者真正的意愿。所以实现图像去噪对于我们后续的分割有着极其重要的作用,是图像分割的前续工作。 1.2 基于平滑滤波器处理的图像去噪模型图像去噪的困难度很大,为了有效地去除噪声,可以使用一些平滑滤波器对图像进行处理,例如:中值滤波,均值滤波,高斯滤波等。这些去噪方法建立在整幅图模糊的

15、基础上,使图像变得平滑,改善了图像的质量,有利于抽取对象特征进行分析。但这些经典方法会使图片丢失边缘和纹理信息。因此我们这次采取的图像去噪的方法是TV法即全变分(TotalVariation)法,这种方法在去除噪声的同时能够很好的有效的保证图像的边缘信息。它的基本思想是:将图像去噪建模成一个能量函数最小化问题,使图像达到平滑状态,由于该方法引入了偏微方程的各向异性扩散方程用于图像去噪,在平滑噪声的同时,可以使边缘得以有效地保持,较好的解决了恢复图像细节和去除噪声之间的矛盾。全变分(TV)图像去噪模型是由Rudin、OsherandFatemi提出的,已成为图像去噪以及图像复原中最为成功的方法之

16、一。TV图像去噪模型的成功之处就在于利用了自然图像内在的正则性,易于从噪声图像的解中反映真实图像的几何正则性,比如边界的平滑性。令f为原始的清晰图像,f0为被噪声污染的图像,即f0(x,y)=f(x,y)+(x,y)(1)式中n为具有零均值、方差为2的随机噪声。表示图像的定义域,像素点(x,y)。通常有噪声图像的全变分比无噪声图像的全变分明显大,最小化全变分(TV)可以消除噪声,因此基于全变分的图像降噪可以归结为如下最小化问题:minTV(f)=dxdy(2)满足约束条件:dy1/|o)2dxdy=2最小化式(1.2)可以等价于最小化下式:o)2dxdy+dxdy式中,第1项为数据保真项,它主

17、要起保留原图像特性和降低图像失真度的作用;第2项为正则化项,参数为规整参数,对平衡去噪与平滑起重要作用,它依赖于噪声水平。其导出的欧拉-拉格朗日方程为:-()+(f-f0)=0从该方程可以看出,扩散系数为。在图像边缘处,|f|较大,扩散系数较小,因此沿边缘方向的扩散较弱,从而保留了边缘;在平滑区域,|f|较小,扩散系数较大,因此在图像平滑区域的扩散能力较强,从而去除了噪声。1.3 算法及编码实现(C语言)boolMyCxImage:TVDenoising(intiter/*=80*/)if(my_image=NULL)returnfalse;if(!my_image-IsValid()retu

18、rnfalse;/算法目前不支持彩色图像,所以对于彩图,先要转换成灰度图。if(!my_image-IsGrayScale()my_image-GrayScale();/returnfalse;/基本参数,这里由于设置矩阵C为0矩阵,不参与运算,所以就忽略之intep=1,nx=width,ny=height;doubledt=(double)ep/5.0f,lam=0.0;intep2=ep*ep;double*image=newDoubleMatrix(nx,ny);double*image0=newDoubleMatrix(nx,ny);/注意一点是CxImage里面图像存储的坐标原点是

19、左下角,Matlab里面图像时左上角原点for(inti=0;iny;i+)for(intj=0;jGetPixelIndex(j,ny-i-1);double*image_x=newDoubleMatrix(nx,ny);/I_x=(I(:,2:nxnx)-I(:,11:nx-1)/2;double*image_xx=newDoubleMatrix(nx,ny);/I_xx=I(:,2:nxnx)+I(:,11:nx-1)-2*I;double*image_y=newDoubleMatrix(nx,ny);/I_y=(I(2:nyny,:)-I(11:ny-1,:)/2;double*ima

20、ge_yy=newDoubleMatrix(nx,ny);/I_yy=I(2:nyny,:)+I(11:ny-1,:)-2*I;double*image_tmp1=newDoubleMatrix(nx,ny);double*image_tmp2=newDoubleMatrix(nx,ny);double*image_dp=newDoubleMatrix(nx,ny);/Dp=I(2:nyny,2:nxnx)+I(11:ny-1,11:nx-1double*image_dm=newDoubleMatrix(nx,ny);/Dm=I(11:ny-1,2:nxnx)+I(2:nyny,11:nx-1

21、);double*image_xy=newDoubleMatrix(nx,ny);/I_xy=(Dp-Dm)/4;double*image_num=newDoubleMatrix(nx,ny);/Num=I_xx.*(ep2+I_y.2)-2*I_x.*I_y.*I_xy+I_yy.*(ep2+I_x.2);double*image_den=newDoubleMatrix(nx,ny);/Den=(ep2+I_x.2+I_y.2).(3/2);/对image进行迭代iter次iter=80;for(intt=1;tSetProgress(long)100*t/iter);if(my_image

22、-GetEscape()break;/计算I(:,2:nxnx)和I(:,11:nx-1)/公共部分2到nx-1列for(inti=0;iny;i+)for(intj=0;jnx-1;j+)image_tmp1ij=imageij+1;image_tmp2ij+1=imageij;for(inti=0;iny;i+)image_tmp1inx-1=imageinx-1;image_tmp2i0=imagei0;/计算I_x,I_xx/I_x=(I(:,2:nxnx)-I(:,11:nx-1)/2/I_xx=I(:,2:nxnx)+I(:,11:nx-1)-2*I;for(inti=0;iny;

23、i+)for(intj=0;jnx;j+)image_xij=(image_tmp1ij-image_tmp2ij)/2;image_xxij=(image_tmp1ij+image_tmp2ij)-2*imageij; /计算I(2:nyny,:)和I(11:ny-1,:)/公共部分2到ny-1行for(inti=0;iny-1;i+)for(intj=0;jnx;j+)image_tmp1ij=imagei+1j;image_tmp2i+1j=imageij;for(intj=0;jnx;j+)image_tmp1ny-1j=imageny-1j;image_tmp20j=image0j;

24、/计算I_xx,I_yy/I_y=I(2:nyny,:)-I(11:ny-1,:)/I_yy=I(2:nyny,:)+I(11:ny-1,:)-2*I;for(inti=0;iny;i+)for(intj=0;jnx;j+)image_yij=(image_tmp1ij-image_tmp2ij)/2;image_yyij=(image_tmp1ij+image_tmp2ij)-2*imageij; /计算I(2:nyny,2:nxnx)和I(11:ny-1,11:nx-1)/公共部分分别是矩阵右下角,左上角的ny-1行和nx-1列for(inti=0;iny-1;i+)for(intj=0;

25、jnx-1;j+)image_tmp1ij=imagei+1j+1;image_tmp2i+1j+1=imageij;for(inti=0;iny-1;i+)image_tmp1inx-1=imagei+1nx-1;image_tmp2i+10=imagei0;for(intj=0;jnx-1;j+)image_tmp1ny-1j=imageny-1j+1;image_tmp20j+1=image0j;image_tmp1ny-1nx-1=imageny-1nx-1;image_tmp200=image00;/计算Dp=I(2:nyny,2:nxnx)+I(11:ny-1,11:nx-1);f

26、or(inti=0;iny;i+)for(intj=0;jnx;j+)image_dpij=image_tmp1ij+image_tmp2ij; /计算I(11:ny-1,2:nxnx)和I(2:nyny,11:nx-1)/公共部分分别是矩阵左下角,右上角的ny-1行和nx-1列for(inti=0;iny-1;i+)for(intj=0;jnx-1;j+)image_tmp1i+1j=imageij+1;image_tmp2ij+1=imagei+1j;for(inti=0;iny-1;i+)image_tmp1i+1nx-1=imageinx-1;image_tmp2i0=imagei+1

27、0;for(intj=0;jnx-1;j+)image_tmp10j=image0j+1;image_tmp2ny-1j+1=imageny-1j;image_tmp10nx-1=image0nx-1;image_tmp2ny-10=imageny-10;/计算Dm=I(11:ny-1,2:nxnx)+I(2:nyny,11:nx-1);for(inti=0;iny;i+)for(intj=0;jnx;j+)image_dmij=image_tmp1ij+image_tmp2ij;/计算I_xy=(Dp-Dm)/4;for(inti=0;iny;i+)for(intj=0;jnx;j+)ima

28、ge_xyij=(image_dpij-image_dmij)/4;/计算过程:/计算Num=I_xx.*(ep2+I_y.2)-2*I_x.*I_y.*I_xy+I_yy.*(ep2+I_x.2)和Den=(ep2+I_x.2+I_y.2).(3/2);for(inti=0;iny;i+)for(intj=0;jnx;j+)image_numij=image_xxij*(image_yij*image_yij+ep2)-2*image_xij*image_yij*image_xyij+image_yyij*(image_xij*image_xij+ep2);image_denij=pow(i

29、mage_xij*image_xij+image_yij*image_yij+ep2),1.5);/计算I:I_t=Num./Den+lam.*(I0-I+C);I=I+dt*I_t;%evolveimagebydtfor(inti=0;iny;i+)for(intj=0;jnx;j+)imageij+=dt*(image_numij/image_denij+lam*(image0ij-imageij);/迭代结束/赋值图像BYTEtmp;for(inti=0;iny;i+)for(intj=0;jSetPixelIndex(j,ny-i-1,tmp);/删除内存deleteDoubleMat

30、rix(image_x,nx,ny);deleteDoubleMatrix(image_y,nx,ny);deleteDoubleMatrix(image_xx,nx,ny);deleteDoubleMatrix(image_yy,nx,ny);deleteDoubleMatrix(image_tmp1,nx,ny);deleteDoubleMatrix(image_tmp2,nx,ny);deleteDoubleMatrix(image_dp,nx,ny);deleteDoubleMatrix(image_dm,nx,ny);deleteDoubleMatrix(image_xy,nx,ny

31、);deleteDoubleMatrix(image_num,nx,ny);deleteDoubleMatrix(image_den,nx,ny);deleteDoubleMatrix(image0,nx,ny);deleteDoubleMatrix(image,nx,ny);returntrue;/开辟二维数组函数double*MyCxImage:newDoubleMatrix(intnx,intny)double*matrix=newdouble*ny;for(inti=0;iny;i+)matrixi=newdoublenx;if(!matrix)returnNULL;returnmat

32、rix;/清除二维数组内存函数boolMyCxImage:deleteDoubleMatrix(double*matrix,intnx,intny)if(!matrix)returntrue;for(inti=0;iny;i+)if(matrixi)deletematrixi;deletematrix;returntrue;2图像文件的读写技术 BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB) 和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP

33、文 件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是 Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。下面用c语言来读写bmp文件2.2算法及编码实现 2.2.1 编码实现#includestdafx.h#include#include #include #include #include #include #include #include using namespace std;/-/以下该模块是完成BMP图像(彩色图像是bit

34、 RGB各bit)的像素获取,并存在文件名为xiang_su_zhi.txt中unsigned char *pBmpBuf;/读入图像数据的指针int bmpWidth;/图像的宽int bmpHeight;/图像的高RGBQUAD *pColorTable;/颜色表指针int biBitCount;/图像类型,每像素位数/-/读图像的位图数据、宽、高、颜色表及每像素位数等数据进内存,存放在相应的全局变量中bool readBmp(char *bmpName) FILE *fp=fopen(bmpName,rb);/二进制读方式打开指定的图像文件 if(fp=0) return 0; /跳过位

35、图文件头结构BITMAPFILEHEADER fseek(fp, sizeof(BITMAPFILEHEADER),0); /定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中 BITMAPINFOHEADER head; fread(&head, sizeof(BITMAPINFOHEADER), 1,fp); /获取图像宽、高、每像素所占位数等信息 bmpWidth = head.biWidth; bmpHeight = head.biHeight; biBitCount = head.biBitCount;/定义变量,计算图像每行像素所占的字节数(必须是的倍数) int

36、lineByte=(bmpWidth * biBitCount/8+3)/4*4;/灰度图像有颜色表,且颜色表表项为 if(biBitCount=8) /申请颜色表所需要的空间,读颜色表进内存 pColorTable=new RGBQUAD256; fread(pColorTable,sizeof(RGBQUAD),256,fp); /申请位图数据所需要的空间,读位图数据进内存 pBmpBuf=new unsigned charlineByte * bmpHeight; fread(pBmpBuf,1,lineByte * bmpHeight,fp); fclose(fp);/关闭文件 ret

37、urn 1;/读取文件成功/-/给定一个图像位图数据、宽、高、颜色表指针及每像素所占的位数等信息,将其写到指定文件中bool saveBmp(char *bmpName, unsigned char *imgBuf, int width, int height, int biBitCount, RGBQUAD *pColorTable) /如果位图数据指针为,则没有数据传入,函数返回 if(!imgBuf) return 0; /颜色表大小,以字节为单位,灰度图像颜色表为字节,彩色图像颜色表大小为 int colorTablesize=0; if(biBitCount=8) colorTabl

38、esize=1024; /待存储图像数据每行字节数为的倍数 int lineByte=(width * biBitCount/8+3)/4*4; /以二进制写的方式打开文件 FILE *fp=fopen(bmpName,wb); if(fp=0) return 0; /申请位图文件头结构变量,填写文件头信息 BITMAPFILEHEADER fileHead; fileHead.bfType = 0x4D42;/bmp类型 /bfSize是图像文件个组成部分之和 fileHead.bfSize= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADE

39、R) + colorTablesize + lineByte*height; fileHead.bfReserved1 = 0; fileHead.bfReserved2 = 0; /bfOffBits是图像文件前个部分所需空间之和 fileHead.bfOffBits=54+colorTablesize; /写文件头进文件 fwrite(&fileHead, sizeof(BITMAPFILEHEADER),1, fp); /申请位图信息头结构变量,填写信息头信息 BITMAPINFOHEADER head; head.biBitCount=biBitCount; head.biClrImp

40、ortant=0; head.biClrUsed=0; head.biCompression=0; head.biHeight=height; head.biPlanes=1; head.biSize=40; head.biSizeImage=lineByte*height; head.biWidth=width; head.biXPelsPerMeter=0; head.biYPelsPerMeter=0; /写位图信息头进内存 fwrite(&head, sizeof(BITMAPINFOHEADER),1, fp); /如果灰度图像,有颜色表,写入文件 if(biBitCount=8) fwrite(pColorTable, sizeof(RGBQUAD),256, fp); /写位图数据进文件 fwrite(imgBuf, height*lineByte, 1, fp); /关闭文件 fclose(fp); return 1;/-/以下为像素的读取函数void xiang_su_du_qu() /读入指定BMP文件进内存 char readPath=8.BMP; readBmp(readPath); /输出图像的信息 coutwidth=bmpWidth height=bmpHeight b

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服