千家信息网

如何用C语言实现bmp图像对比度扩展

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"如何用C语言实现bmp图像对比度扩展",在日常操作中,相信很多人在如何用C语言实现bmp图像对比度扩展问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如
千家信息网最后更新 2026年11月01日如何用C语言实现bmp图像对比度扩展

这篇文章主要介绍"如何用C语言实现bmp图像对比度扩展",在日常操作中,相信很多人在如何用C语言实现bmp图像对比度扩展问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何用C语言实现bmp图像对比度扩展"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

假设有一幅图,由于成象时光照不足,使得整幅图偏暗(例如,灰度范围从0到63);或者成象时光照过强,使得整幅图偏亮(例如,灰度范围从200到255),我们称这些情况为低对比度,即灰度都挤在一起,没有拉开。灰度扩展的意思就是把你所感性趣的灰度范围拉开,使得该范围内的象素,亮的越亮,暗的越暗,从而达到了增强对比度的目的。

图中的横坐标gold表示原图的灰度值,纵坐标gnew表示gold经过对比度扩展后得到了新的灰度值。a,b,c为三段直线的斜率,因为是对比度扩展,所以斜率b>1。g1old和g2old表示原图中要进行对比度扩展的范围,g1new和g2new表示对应的新值。用公式表示为:

实现代码:

#include#include#include#pragma pack(1)   //全紧凑模式typedef struct { unsigned char bfType[2]; unsigned int bfSize; unsigned short bfReserved1; unsigned short bfReserved2; unsigned int bfOffBits;}bitmapFileHeader;typedef struct { unsigned int biSize; unsigned int biWidth; unsigned int biHeight; unsigned short biPlanes; unsigned short biBitCount; unsigned int biCompression; unsigned int biSizeImage; unsigned int biXPixPerMeter; unsigned int biYPixPerMeter; unsigned int biClrUsed; unsigned int biClrImportant;}bitmapInfoHeader;typedef struct{ unsigned char rgbBlue; unsigned char rgbGreen; unsigned char rgbRed; unsigned char rgbReserved;}rgbQUAD;typedef struct{ bitmapFileHeader bfHeader; bitmapInfoHeader biHeader; rgbQUAD palette[256]; unsigned char *imgData;}bmp;int main(){ FILE *fp; if((fp=fopen("d:\Temp\\test_gray.bmp","rb"))==NULL){  perror("can not open file!");  return -1; } //读入彩色bmp图像文件头,信息头和图像数据 bitmapFileHeader bfHeader; fread(&bfHeader,14,1,fp); bitmapInfoHeader biHeader; fread(&biHeader,40,1,fp); int imSize=biHeader.biSizeImage; int width=biHeader.biWidth; int height=biHeader.biHeight; int bitCount=biHeader.biBitCount; int lineBytes=(width*bitCount+31)/32*4;  fseek(fp,bfHeader.bfOffBits,SEEK_SET); unsigned char*imageData=(unsigned char*)malloc(imSize*sizeof(unsigned char)); fread(imageData,imSize*sizeof(unsigned char),1,fp);  fclose(fp); bmp b; memcpy(&(b.bfHeader),&bfHeader,sizeof(bfHeader)); memcpy(&(b.biHeader),&biHeader,sizeof(biHeader)); b.imgData=(unsigned char*)malloc(sizeof(unsigned char)*imSize); memset(b.imgData,0,sizeof(unsigned char)*imSize); for(int i=0;i<256;i++){  b.palette[i].rgbBlue=i;  b.palette[i].rgbGreen=i;  b.palette[i].rgbRed=i; }  int i,j,temp; double m=1.5,g1=100.0,g2=200.0; //m在这里对应斜率b,因为"b"这个符号被bmp图像结构名占了 double a=(255.0-m*(g2-g1))/(255.0-(g2-g1)); for(i=0;i

到此,关于"如何用C语言实现bmp图像对比度扩展"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

对比度 图像 灰度 范围 语言 学习 斜率 原图 成象 时光 更多 帮助 实用 紧凑 接下来 代码 信息 公式 就是 彩色 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 上海睿民互联网科技有限公司 重生之互联网科技帝国 互联网核心科技是什么 美国互联网科技巨头监管 互联网公司 科技公司 金融科技与互联网金融 青岛互联网科技公司 互联网科技论坛 太原新华互联网科技学校怎么样 中国科技互联网公司收入 广州恒生互联网科技有限 厦门比较好的科技互联网公司 世界互联网科技公司市值排名 互联网科技大奖都有哪些公司 燊美集互联网科技有限公司 佛山市翊博互联网络科技有限公司 科技互联网海报 江苏苏星互联网科技有限公司 雨阳互联网卡科技有限公司 互联网科技有限公司 互联网黑科技 互联网科技有限公司图片 互联网科技英文 海南科技产业互联网平台 中盈科技互联网信息有限公司 互联网和黑科技的看法 宝灵互联网科技有限公司 互联网金融运营模式中的金融科技 马化腾互联网科技教学
0