c语言灰度函数 灰度开运算

如何用C语言程序从bmp格式的图片中读取图片的灰度值?方法一c语言灰度函数:
#includestdio.h
#includestdlib.h
void main()
{
int i,j;
FILE *fp;//指向文件c语言灰度函数的指针
fp=fopen("Lena.raw","rb");//打开文件 。注意raw格式图像要以只读二进制流c语言灰度函数的形式打开
if(!fp)
{
printf("ERROR!\n");
}
unsigned char *pData=https://www.04ip.com/post/new unsigned char[256*256]; //注意c语言灰度函数:raw图像用无符号char型读入
fread(pData,sizeof(unsigned char),(256*256),fp);//fread具体用法见msdn
fclose(fp); //取消fp指针指向
int value[256]={0}; //声明并初始化存灰度值的数组
for(i=0;i(256*256);i++) //统计灰度值
{
value[pData[i]]++;
}
printf("灰度值\t\t大小"); //
printf("\n");
fp=fopen("result.txt","wb");
fprintf(fp,"灰度值\t\t大小\r\n");//注意\r\n 否则不能换行!
for(j=0;j256;j++)//将结果输出到txt中
{
printf("%d\t\t%d\n",j,value[j]);
// fwrite(value,sizeof(int),256,fp);
fprintf(fp,"%d\t\t%d\r\n",j,value[j]);//注意\r\n 否则不能换行
}
delete[] pData;//删除空间
fclose(fp); //关闭txt文件
}
方法二:
#includestdio.h
#includestdlib.h
int value[256]={0};
int fread(unsigned char *pData)//把声明的那个数组空间指针作为参数来回传
{
FILE *fp;
fp=fopen("Lena.raw","rb");
if(!fp)
{
printf("Read ERROR!\n");
}
fread(pData,sizeof(unsigned char),(256*256),fp);
fclose(fp);
return 0; //
}
【c语言灰度函数 灰度开运算】int fchuli(unsigned char *pData)
{
for(int i=0;i(256*256);i++) //统计灰度值
{
value[pData[i]]++;
}
return 0; //
}
int fwrite(unsigned char *pData)
{
FILE *fp;
fp=fopen("result.txt","wb");
fprintf(fp,"灰度值\t\t大小\r\n");
for(int j=0;j256;j++) //将结果输出到txt中
{
printf("%d\t\t%d\n",j,value[j]);
// fwrite(value,sizeof(int),256,fp);
fprintf(fp,"%d\t\t%d\r\n",j,value[j]);
}
delete[] pData;//删除空间
fclose(fp); //关闭txt文件
return value[256]; //
}
int main(unsigned char *pData)
{
pData=https://www.04ip.com/post/new unsigned char[256*256];//在主函数里声明新空间
fread(pData); //传数组地址
fchuli(pData);
fwrite(pData);
return 0;
}
怎样用C语言实现图像的灰度化新建MFC工程吧,先打开bmp格式的图片,其它格式的压缩了,需先解码,再分别取RGB的值为RGB的任意一个,也可取RGB三者的平均值,这样就可以灰度化了
用C语言编写灰度图像直方图变换增强参考一下这个程序:
#define IMAGEWIDTH 80
#define IMAGEHEIGHT 80
void Histogram(unsigned char *pImage,int nWidth,int nHeight,float fHisto[256]);
void Enhance(unsigned char *pImage,unsigned char *pImage1,int nWidth,int nHeight,float fHisto[256],float fHisto1[256]);
unsigned char dbImage[IMAGEWIDTH*IMAGEHEIGHT];
unsigned char dbTargetImage[IMAGEWIDTH*IMAGEHEIGHT];
float fHistogram[256],fHistogram1[256];
unsigned char lut[256];
/* 直方图统计程序 */
int main()
{
... //准备一幅灰度图片到dbImage
Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram); //做直方图统计
Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1); //直方图增强输出到dbTargetImage
...//完成后显示
}
void Histogram(unsigned char *pImage,int nWidth,int nHeight,float fHisto[256])
{
int i,j;
unsigned int uWork;
unsigned char *pWork;
for ( i=0;i256;i++ )fHisto[i]=0.0f;

推荐阅读