jpeg图片解码灰度二值化c语言实现


利用C语言实现JPEG图片解码,转换为BMP图片,在将其灰度化,自定义阈值二值化。
资源截图
代码片段和文件信息
#include 
#include 
#include 
/*以下注释部分为BMP灰度图的文件结构(已经包含在windows.h文件中在此列出来方便LZ参考)*/
/*
//位图文件头
typedef struct tagBITMAPFILEHEADER {
  WORD bfType; 
  DWORD bfSize; 
  WORD bfReserved1; 
  WORD bfReserved2; 
  DWORD bfOffBits; 
} BITMAPFILEHEADER; 


typedef struct tagBITMAPINFOHEADER { 
  DWORD biSize; 
  LONG biWidth; 
  LONG biHeight; 
  WORD biPlanes; 
  WORD biBitCount 
  DWORD biCompression; 
  DWORD biSizeImage; 
  LONG biXPelsPerMeter; 
  LONG biYPelsPerMeter; 
  DWORD biClrUsed; 
  DWORD biClrImportant; 
} BITMAPINFOHEADER; 

//彩色表
typedef struct tagRGBQUAD { 
 BYTE rgbBlue;
 BYTE rgbGreen;
 BYTE rgbRed;
 BYTE rgbReserved;
} RGBQUAD;

//位图信息头
typedef struct tagBITMAPINFO { 
 BITMAPINFOHEADER bmiHeader;
 RGBQUAD bmiColors[1];
} BITMAPINFO;

*/

void main()
{//所举例程为从BMP灰度图中抽取一层并输出为图片
 FILE *fi*fo;
 UINT count=0;
 BITMAPFILEHEADER bmfh;
 BITMAPINFO bmi;
 int ij;
 BYTE p;
 BYTE buf[2000];


 //fi = fopen(“bupt_8bit.bmp““rb“);
 fi = fopen(“test.bmp““rb“);
 if(fi==NULL)
 {
  printf(“文件打开错误!
“);
  return;
 }

 //读取文件头
 fread(&bmfhsizeof( bmfh ) 1fi);

 printf(“文件头信息:
“);
 printf(“文件类型:%c%c
“bmfh.bfType%256 bmfh.bfType/256);
 printf(“文件大小:%d
“bmfh.bfSize);
 printf(“图像数据偏移量:%d
“bmfh.bfOffBits);
 

 //读BMP信息头--------读彩色表
 fread(&bmisizeof(BITMAPINFO)1fi);
 
 printf(“
图像信息:
“);
 printf(“位图宽度:%d
“bmi.bmiHeader.biWidth);
 printf(“位图高度:%d
“bmi.bmiHeader.biHeight);
 printf(“每个像素的位数:%d
“bmi.bmiHeader.biBitCount);
 printf(“位图数据的大小:%d
“bmi.bmiHeader.biSizeImage);
 printf(“用像素/米表示的水平分辨率:%d
“bmi.bmiHeader.biXPelsPerMeter);
 printf(“用像素/米表示的垂直分辨率:%d
“bmi.bmiHeader.biYPelsPerMeter);
 printf(“每个像素的位数:%d
“bmi.bmiHeader.biBitCount);
 printf(“位图使用的颜色数:%d
“bmi.bmiHeader.biClrUsed);
 

 
 for(i=0;i<8;i++)//像为8bits,所以只有8层
 {
  //fo = fopen(“bupt_8bit_out.bmp““wb“);
  fo = fopen(“bupt_out.bmp““wb“);

  fseek(fi00);
  fread(&buf1bmfh.bfOffBitsfi);//1是因为此处图像为8bits的,所以size是1字节
  fwrite(&buf1bmfh.bfOffBitsfo);

  fseek(fibmfh.bfOffBits0);//将指针定位到图像数据处,偏移量为bmfh.bfOffBits

  for(j=0;j  {
   fread(&p11fi);
   p = (p>>(i+1))<<(i+1);//将后最低i+1层写为0
   fwrite(&p11fo);
  }
  
  while(fread(&p11fi))
   fwrite(&p11fo);
  
  fclose(fo);
  
  printf(“替换%d后的结果回车继续。
“i);
  getchar();
 }
 fclose(fi); 
 getchar();


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-11-04 11:46  JPEGtoGarytoBIN_c代码
     目录           0  2017-10-24 23:05  JPEGtoGarytoBIN_c代码mptoBIN
     文件        2726  2017-10-10 01:29  JPEGtoGarytoBIN_c代码mptoBINmp (2).c
     文件        2726  2017-10-10 01:29  JPEGtoGarytoBIN_c代码mptoBINmp.c
     文件      133584  2017-10-10 01:29  JPEGtoGarytoBIN_c代码mptoBINmp.exe
     文件      493554  2017-10-10 10:25  JPEGtoGarytoBIN_c代码mptoBINupt_out.bmp
     文件      493554  2017-10-10 00:44  JPEGtoGarytoBIN_c代码mptoBIN est.bmp
     文件        2781  2017-10-10 01:25  JPEGtoGarytoBIN_c代码mptoBIN用C语言进行BMP图像二值化-显示其长宽-最好有解释.txt
     目录           0  2017-10-24 23:05  JPEGtoGarytoBIN_c代码jpegTobmp
     文件         758  1998-04-23 14:04  JPEGtoGarytoBIN_c代码jpegTobmpJPEG.H
     文件        1214  2017-10-10 16:25  JPEGtoGarytoBIN_c代码jpegTobmpMakefile.win
     文件      921654  2017-10-10 16:25  JPEGtoGarytoBIN_c代码jpegTobmpRGB.bmp
     文件       23059  2017-10-10 16:25  JPEGtoGarytoBIN_c代码jpegTobmpjpeg2bmp.c
     文件       25438  2017-10-10 16:25  JPEGtoGarytoBIN_c代码jpegTobmpjpeg2bmp.o
     文件         196  2017-10-10 16:23  JPEGtoGarytoBIN_c代码jpegTobmpmain.c
     文件        1137  2017-10-10 16:23  JPEGtoGarytoBIN_c代码jpegTobmpmain.o
     文件       92599  2017-10-10 16:22  JPEGtoGarytoBIN_c代码jpegTobmp est.jpg
     文件        1459  2017-10-10 15:54  JPEGtoGarytoBIN_c代码jpegTobmp obmp.dev
     文件      151580  2017-10-10 16:25  JPEGtoGarytoBIN_c代码jpegTobmp obmp.exe
     文件         414  2017-10-10 18:37  JPEGtoGarytoBIN_c代码jpegTobmp obmp.layout
     目录           0  2017-10-24 23:05  JPEGtoGarytoBIN_c代码jpegTobmp新建文件夹
     文件        2367  2017-10-10 00:54  JPEGtoGarytoBIN_c代码jpegTobmp新建文件夹inary.c
     文件        1341  2017-10-10 00:54  JPEGtoGarytoBIN_c代码jpegTobmp新建文件夹inary.o
     文件       15217  2017-10-10 00:11  JPEGtoGarytoBIN_c代码jpegTobmp新建文件夹 est.jpg
     文件        4474  2017-10-10 00:56  JPEGtoGarytoBIN_c代码jpegTobmp新建文件夹 obinary.c
     文件        3084  2017-10-10 00:53  JPEGtoGarytoBIN_c代码jpegTobmp新建文件夹 obinary.o
     文件          86  2017-10-10 00:32  JPEGtoGarytoBIN_c代码jpegTobmp说明.txt
     目录           0  2017-10-24 23:05  JPEGtoGarytoBIN_c代码 oBIN
     文件      165578  2017-10-10 22:40  JPEGtoGarytoBIN_c代码 oBIN1.bmp
     文件        3651  2017-10-10 10:36  JPEGtoGarytoBIN_c代码 oBINin.c
     文件      135137  2017-10-10 01:45  JPEGtoGarytoBIN_c代码 oBINin.exe
............此处省略39个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)