zoukankan      html  css  js  c++  java
  • c语言实现灰度图转换为二值图

    将上篇得到的灰度图转换为二值图,读取像素数据,低于某一值置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;//该结构的大小
     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 tagRGBQUAD
     46 {
     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     //灰度值低于阈值则置0
     86     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             else
     94                 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
    ");
    104     return 0;
    105 }

    结果:

    明天考四级了,考完再写剩下的

  • 相关阅读:
    封装和参数调用(格式修改)
    今天休息
    2018.1.9内部类
    2018.1.8转型
    环境变量
    环境变量
    计算机的高级语言
    常用的设计模式
    常用的设计模式
    【python3】中 elif 的使用
  • 原文地址:https://www.cnblogs.com/wd1001/p/4571916.html
Copyright © 2011-2022 走看看