C语言进行数字图像处理a
用 c 语言进行数字图像处理
作者:彭千贺
邮件:pengqianhe@
博客:
声明:本篇文章和程序全部有彭千贺原创,严禁任何形式的修改,如有发现任何形式的修改,将
有权追究其相关责任人的法律责任。但是,你可以自由的传播本文章的副本。如需要修改,请邮
件通知我。
其实,数字图像处理有几步呢?一共三步。第一步,读入图片。第二步,处理图片。第三步,保存图片 。
而第二步主要涉及的是处理图像的算法,所以,我在这里就不多说了。而第一步和第三步是为第二步做
铺垫的。
关于位图文件的文件结构,可以参看我的另外一篇文章《详说如何用 C 语言,C++和JAVA 来读入和保
存位图》。此文章可以在我的博客下载到。我在这里,贴出用 C 语言进行读入位图的文件头,信息头,
像素数据和保存位图等程序,另外还有声明位图文件结构的头文件。
以下程序在VC6.0 中,已经无误通过编译。
位图文件结构的声明:BMP.h
#ifndef BMP_H_INCLUDED
#define BMP_H_INCLUDED
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef long LONG;
typedef unsigned char BYTE;
typedef struct tagBITMAPFILEHEADER
{ // bmfh
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
}BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER
{ // bmih
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
{ // rgbq
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
}RGBQUAD;
typedef struct tagBITMAPINFO
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
}BITMAPINFO;
#endif // BMP_H_INCLUDED
主程序:main.c
#include
#include
#include
#include
#include
#include
#include "BMP.h"
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
BYTE *imgData;
bool bReadBMFH=false;
bool bReadBMIH=false;
bool bReadPixel=false;
//检查路径是否合法:文件能打开;以 bmp 为后缀名
int CheckFilePath(char *filepath);
//读入位图的文件头
int ReadFileHeader(char *filepath,BITMAPFILEHEADER *bmfh);
//打印位图的文件头
void PrintFileHeader(BITMAPFILEHEADER *bmfh);
//读入位图的信息头
int ReadInfoHeader(char *