首页 / C语言 / c语言实现灰度图转换为二值图
c语言实现灰度图转换为二值图
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c语言实现灰度图转换为二值图,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2384字,纯文字阅读大概需要4分钟。
内容图文
将上篇得到的灰度图转换为二值图,读取像素数据,低于某一值置0,否则设置为255,为得到更好的效果不同图片应采用不同的值
1 /* 2 2015年6月2日11:16:22 3 灰度图转换为二值图 4 blog: http://www.cnblogs.com/wd1001/ 5 */ 6 #include<stdio.h> 7 #include<malloc.h> 8 #include<stdlib.h> 9/* 10位图头结构 11*/ 12#pragma pack(1) 13 typedef struct tagBITMAPFILEHEADER 14{ 15 unsigned char bfType[2];//文件格式 16 unsigned long bfSize;//文件大小 17 unsigned short bfReserved1;//保留 18 unsigned short bfReserved2; 19 unsigned long bfOffBits; //DIB数据在文件中的偏移量 20}fileHeader; 21#pragma pack() 22/* 23位图数据信息结构 24*/ 25#pragma pack(1) 26 typedef struct tagBITMAPINFOHEADER 27{ 28 unsigned long biSize;//该结构的大小 29long biWidth;//文件宽度 30long biHeight;//文件高度 31 unsigned short biPlanes;//平面数 32 unsigned short biBitCount;//颜色位数 33 unsigned long biCompression;//压缩类型 34 unsigned long biSizeImage;//DIB数据区大小 35long biXPixPerMeter; 36long biYPixPerMeter; 37 unsigned long biClrUsed;//多少颜色索引表 38 unsigned long biClrImporant;//多少重要颜色 39}fileInfo; 40#pragma pack() 41/* 42调色板结构 43*/ 44#pragma pack(1) 45 typedef struct tagRGBQUAD 46{ 47 unsigned char rgbBlue; //蓝色分量亮度 48 unsigned char rgbGreen;//绿色分量亮度 49 unsigned char rgbRed;//红色分量亮度 50 unsigned char rgbReserved; 51}rgbq; 52#pragma pack() 53 54int main() 55{ 56int i,j; 57 unsigned char ImgData[1000]; 58 FILE * fpGray,* fpBin; 59 fileHeader * fh; 60 fileInfo * fi; 61 rgbq * fq; 62 63if((fpGray=fopen("G:/vc6.0/work/22.bmp","rb"))==NULL) 64 { 65 printf("打开文件失败"); 66 exit(0); 67 } 68 69if((fpBin=fopen("G:/vc6.0/work/33.bmp","wb"))==NULL) 70 { 71 printf("创建文件失败"); 72 exit(0); 73 } 74//读取灰度图数据 75 fh=(fileHeader *)malloc(sizeof(fileHeader)); 76 fi=(fileInfo *)malloc(sizeof(fileInfo)); 77 fq=(rgbq *)malloc(256*sizeof(rgbq)); 78 fread(fh,sizeof(fileHeader),1,fpGray); 79 fread(fi,sizeof(fileInfo),1,fpGray); 80 fread(fq,sizeof(rgbq),256,fpGray); 81//将头信息写入 82 fwrite(fh,sizeof(fileHeader),1,fpBin); 83 fwrite(fi,sizeof(fileInfo),1,fpBin); 84 fwrite(fq,sizeof(rgbq),256,fpBin); 85//灰度值低于阈值则置0 86for(i=0;i<(fi->biHeight);i++) 87 { 88for(j=0;(j<(fi->biWidth+3)/4*4);j++) 89 { 90 fread(&ImgData[j],1,1,fpGray); 91if(ImgData[j]>142) 92 ImgData[j]=255; 93else 94 ImgData[j]=0; 95 } 96 fwrite(ImgData,1,j,fpBin); 97 } 98free(fh); 99free(fi); 100free(fq); 101 fclose(fpBin); 102 fclose(fpGray); 103 printf("success\n"); 104return0; 105 }
结果:
明天考四级了,考完再写剩下的
原文:http://www.cnblogs.com/wd1001/p/4571916.html
内容总结
以上是互联网集市为您收集整理的c语言实现灰度图转换为二值图全部内容,希望文章能够帮你解决c语言实现灰度图转换为二值图所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。