转载自:https://www.cnblogs.com/wd1001/p/4571916.html

c语言实现灰度图转换为二值图

将上篇得到的灰度图转换为二值图,读取像素数据,低于某一值置0,否则设置为255,为得到更好的效果不同图片应采用不同的值

  1 /*2 2015年6月2日11:16:223 灰度图转换为二值图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 tagBITMAPFILEHEADER14 {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 tagBITMAPINFOHEADER27 {28     unsigned long biSize;//该结构的大小29     long biWidth;//文件宽度30     long biHeight;//文件高度31     unsigned short biPlanes;//平面数32     unsigned short biBitCount;//颜色位数33     unsigned long biCompression;//压缩类型34     unsigned long biSizeImage;//DIB数据区大小35     long biXPixPerMeter;36     long biYPixPerMeter;37     unsigned long biClrUsed;//多少颜色索引表38     unsigned long biClrImporant;//多少重要颜色39 }fileInfo;40 #pragma pack()41 /*42 调色板结构43 */44 #pragma pack(1)45 typedef struct tagRGBQUAD46 {47     unsigned char rgbBlue; //蓝色分量亮度48     unsigned char rgbGreen;//绿色分量亮度49     unsigned char rgbRed;//红色分量亮度50     unsigned char rgbReserved;51 }rgbq;52 #pragma pack()53 54 int main()55 {56     int i,j;57     unsigned char ImgData[1000];58     FILE * fpGray,* fpBin;59     fileHeader * fh;60     fileInfo * fi;61     rgbq * fq;62 63     if((fpGray=fopen("G:/vc6.0/work/22.bmp","rb"))==NULL)64     {65         printf("打开文件失败");66         exit(0);67     }68     69     if((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     //灰度值低于阈值则置086     for(i=0;i<(fi->biHeight);i++)87     {88         for(j=0;(j<(fi->biWidth+3)/4*4);j++)89         {90             fread(&ImgData[j],1,1,fpGray);91             if(ImgData[j]>142)92                 ImgData[j]=255;93             else94                 ImgData[j]=0;95         }96         fwrite(ImgData,1,j,fpBin);97     }98     free(fh);99     free(fi);
100     free(fq);
101     fclose(fpBin);
102     fclose(fpGray);
103     printf("success\n");
104     return 0;
105 }

结果:

c语言实现灰度图转换为二值图相关推荐

  1. 利用Floyd-Steinberg方法(dithering),将灰度图转换为二值图

    灰度图有256级灰度,而二值图只有黑白两色.颜色数目大大降低,直观感觉转换效果不会好.其实人眼类似于一个低通滤波器,你看到的并不是一个一个像素点,而是接受的颜色信息是一个区域内的颜色信息的综合效果. ...

  2. opencv:把三通道图转换成灰度图、二值图

    #include <opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<openc ...

  3. 彩色图、灰度图和二值图

    首先计算机中图像是用矩阵存储的,所以在分析图像时,应当用矩阵的眼光来看待 1.RGB模式(百万种颜色) 2.CMYK模式(四种印刷色) 3.索引模式(256种颜色) 4.灰度模式(256级灰度) 5. ...

  4. 图像的灰度化以及二值图函数

    灰度化函数主要用rgb2gray()函数,,二值化函数主要是im2bw(I,alpha)函数:. 程序如下: I=imread('C:/lena.jpg'); % I=rgb2gray(I);   % ...

  5. MATLAB从原图,灰度图,二值图,反白图,边缘检测

    MATLAB数字图像处理,使用MATLAB可以将一张图变为"线稿"(显然效果不太行,可以再使用PS),如图: 一.读取一张图片的文件.方法详见:读取,剪裁一张图像. 比如我们打开一 ...

  6. RGB 转换为灰度图、二值化图

    from PIL import Image I = Image.open('lena.png') I.show() L = I.convert('L') #转化为灰度图 L = I.convert(' ...

  7. 利用OpenCV和C++实现由RGB图像转化为灰度图,再将灰度图转化为二值图的程序

    #include<opencv2\opencv.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<opencv2\i ...

  8. C语言实现将彩色BMP位图转化为二值图

    2019独角兽企业重金招聘Python工程师标准>>> CTF做了图片的隐写题,还没有形成系统的认识,先来总结一下BMP图的组成,并通过将彩色图转为二值图的例子加深下理解. 只写了位 ...

  9. bmp图片灰度化和二值化

    C语言去除bmp图片的背景 一.前言 二.灰度化 头文件 C文件 三.二值化 一.前言 图像处理中,大部分的处理方法都需要事先把彩色图转换成灰度图才能进行相关的计算.识别. 彩色图转换灰度图的原理如下 ...

最新文章

  1. Codeforces Round #596 Div. 2 C ~E
  2. 项目上线与LOG记录
  3. mysql blob图片_使用mysql的Blob字段存取图片
  4. python快速部署一个服务器_Python加Shell快速部署集群
  5. 今天,“场景赋能•驱动有数”,神策数据 2018 数据驱动大会在京成功举办
  6. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】
  7. CCIE试验备考之交换security(2)
  8. BeetleX使用bootstrap5开发SPA应用
  9. Liunx 命令大全
  10. 剖析Caffe源码之Net类变量
  11. 通过已存在vender文件夹还原composer.json文件
  12. python用符号计算检验多维数组的计算
  13. 使用python脚本将XML 电子表格转变为Excel
  14. 华为手机连电脑_移动办公利器华为MatePad Pro:能写会画有键盘,能当电脑连手机...
  15. split和join和pop和remove用法
  16. poj 1985 Cow Marathon 【树的直径】
  17. perl软件使用报错总结
  18. 马哥linux35期,马哥Linux第五周
  19. 移动开发技术的进化历程(原生开发与跨平台技术)
  20. 查看 apk 签名指令

热门文章

  1. 【链表】两个无序链表合并成递增有序链表(利用原表空间)
  2. 麒麟820和鸿蒙系统,网曝魅族正在适配麒麟820和鸿蒙系统,黄章:我怎么不知道...
  3. MathType如何编辑商标标志
  4. 邮箱发信数量被限制了,有什么方法可以解决么?
  5. 中文知识图谱CN-DBpedia构建的关键技术
  6. 驱动开发之注册表:获取注册表HKEY_CURRENT_USER对应路径(SID)
  7. oracle对某两列求和再求和_分手后4个阶段这样挽回,再狠的他也会心软求和
  8. python栈是什么意思_Python算法之栈(stack)的实现
  9. 【ST表】Zoning Houses
  10. 荣耀30青春版发布 简单说说有哪些亮点