中易网

如何用C语言程序从bmp格式的图片中读取图片的灰度值

答案:2  悬赏:0  
解决时间 2021-01-15 05:25
  • 提问者网友:记得曾经
  • 2021-01-14 23:56
如何用C语言程序从bmp格式的图片中读取图片的灰度值
最佳答案
  • 二级知识专家网友:蓝房子
  • 2021-01-15 01:18
1、首先要了解bmp位图的格式,搜索些技术支持文档,bmp位图基本上是分4大部分,文件信息结果部分,文件头信息结果部分,调色板结果部分,后面就是数据实体部分。及其每个部分对应有用的信息。比如长宽。当然长宽信息你自己可以从window系统下看得到。打开bmp文件,把前面三部分的字节总数给固定下来,逐个字符读取,然后读取数据实体部分,输出就可以了。
2、例程:

#include 
#include 
#pragma pack(2)

typedef unsigned short WORD;

typedef unsigned long DWORD;

typedef struct BMP_FILE_HEADER
{
WORD bType; 
DWORD bSize; 
WORD bReserved1; 
WORD bReserved2; 
DWORD bOffset; 
} BMPFILEHEADER;

typedef struct BMP_INFO
{
DWORD bInfoSize; 
DWORD bWidth; 
DWORD bHeight; 
WORD bPlanes; 
WORD bBitCount; 
DWORD bCompression; 
DWORD bmpImageSize; 
DWORD bXPelsPerMeter; 
DWORD bYPelsPerMeter; 
DWORD bClrUsed; 
DWORD bClrImportant; 
} BMPINF;

typedef struct RGB_QUAD
{
WORD rgbBlue; 
WORD rgbGreen; 
WORD rgbRed; 
WORD rgbReversed; 
} RGBQUAD;
int main()
{
FILE *fp;
BMPFILEHEADER fileHeader;
BMPINF infoHeader;
long offset, bmpImageSize, width, height, bytesPerPixel, size, bitCount;
// int i, j;
// unsigned char **p;
WORD c;
if((fp = fopen("5.bmp", "rb")) == NULL)
{
printf("Cann't open the file!
");
exit(0);
}
fseek(fp, 0, 0);
fread(&fileHeader, sizeof(fileHeader), 1, fp);
fread(&infoHeader, sizeof(infoHeader), 1, fp);
//计算并输出位图数据的偏移量,图像的大小,宽度和高度,每个像素点所占的字节
size = fileHeader.bSize;
offset = fileHeader.bOffset;
bmpImageSize = infoHeader.bmpImageSize;
width = infoHeader.bWidth;
height = infoHeader.bHeight;
bitCount = infoHeader.bBitCount;
bytesPerPixel = infoHeader.bBitCount / 8;
printf("%d %d %d %d %d %d
", size, offset, bmpImageSize, width, height, bitCount, bytesPerPixel);
//输出每个像素点所占字节中的内容
c = fgetc(fp);
while (!feof(fp))
{
printf("%x ", c);
c = fgetc(fp);
}
printf("
");
fclose(fp);
return 0;
}
全部回答
  • 1楼网友:酒者煙囻
  • 2021-01-15 01:42

lz我可以给你一个我以前写过的简单解析bmp的代码。可以取出RGB,再算灰度估计就很容易了吧。

追问有读取图片的程序吗?比如说一张bmp图面放在桌面,用C读取他并且返回灰度值,只有这样才能进行下面的处理啊。。求指导追答这里面是直接按照读二进制方式fread读取然后再处理的。不是用的什么接口什么的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息