资源简介
实现了bmp格式的图像的灰度化,二值化,其中二值化应用了最大类间距的方法确定阀域。适合新手学习。
代码片段和文件信息
#include
#include
#include
using namespace std;
FILE *pPic=NULL;
BITMAPFILEHEADER *pBitmapFileHeader;
BITMAPINFOHEADER *pBitmapInfoHeader;
RGBQUAD *pPalette *pGrayPalette*pBinaryPalette;
int linePixelgrayLinePixelbinaryLinePixel;//the line of pixel number
int threshold=256/2;
unsigned char *pDIB*pGrayDIB*pBinaryDIB*pBigDIB;
void openFileGetInfo()
{
char picName[20]=“your.bmp“;
pBitmapFileHeader=new BITMAPFILEHEADER;
pBitmapInfoHeader=new BITMAPINFOHEADER;
FILE *pPic=fopen(picName“rb“);
if(pPic==0)
{
cout<<“open the file fail“< exit(0);
}
/*void getBITMAPFILEHEADER(){}*/
fread(pBitmapFileHeadersizeof(BITMAPFILEHEADER)1pPic);
if(pBitmapFileHeader->bfType!=0x4d42)
{
cout<<“this is not a BMP file\n“;
exit(0);
}
/*void getBITMAPINFOHEADER(){}*/
fread(pBitmapInfoHeadersizeof(BITMAPINFOHEADER)1pPic);
/*void getPalette(){}*/
// cout<<“用多少位表示颜色 = “<biBitCount< if(pBitmapInfoHeader->biBitCount<24)
{
cout<<“this is not color picture ! \n“;
pPalette=new RGBQUAD[1<biBitCount];
fread(pPalettesizeof(RGBQUAD)1<biBitCountpPic);
}
/*void getDIB(FILE *pic){}*/
linePixel=((pBitmapInfoHeader->biWidth*pBitmapInfoHeader->biBitCount)/8+3)/4*4;
pDIB=new unsigned char [pBitmapInfoHeader->biHeight*linePixel];
fread(pDIB1pBitmapInfoHeader->biHeight*linePixelpPic);
fclose(pPic);
}
void modifyFileHeader()
{
pBitmapInfoHeader->biBitCount=8;
pBitmapInfoHeader->biClrUsed=0;
pBitmapFileHeader->bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256;
grayLinePixel= ((pBitmapInfoHeader->biWidth*pBitmapInfoHeader->biBitCount)/8+3)/4*4;
pBitmapInfoHeader->biSizeImage=grayLinePixel*pBitmapInfoHeader->biHeight;
pBitmapFileHeader->bfSize=pBitmapFileHeader->bfOffBits+ pBitmapInfoHeader->biSizeImage;
}
void createPalette()
{
int i=255;
pGrayPalette=new RGBQUAD[i+1];
while(i>=0)
{
pGrayPalette[i].rgbBlue=(byte)i;
pGrayPalette[i].rgbRed=(byte)i;
pGrayPalette[i].rgbGreen=(byte)i;
i--;
}
}
void modifyDIB()
{
int ij=0temp=0;
int countWidth=0;
int biWidth=pBitmapInfoHeader->biWidth;
int gapGray=grayLinePixel-biWidth;
int gapColour=linePixel-biWidth*3;
pGrayDIB=new unsigned char [grayLinePixel*pBitmapInfoHeader->biHeight];
for(i=0; ibiHeight; i++)
{
if(countWidth==biWidth)
{
countWidth=0;
j+=gapColour;
for(temp=0; temp {
pGrayDIB[i]=pGrayDIB[i-1];
i++;
}
i--;
continue;
}
countWidth++;
- 上一篇:关于一个假分数转换成带分数的小程序
- 下一篇:正六面体平行投影
相关资源
- 图像处理 梯度锐化 C/C++语言实现
- MATLAB数字图像处理:从仿真到C C++代码
- 形状上下文
- 山东大学数字图像处理实验一:图像
- MFC图像处理荧光检测算法代码
- 图像处理连通域算法 c++ vc 6.0
- vc++实现图像处理:中值滤波
- Qt Quick之美图秀秀
- VC图像处理系列(傅立叶变换篇源码
- 用C提取24bit bmp图像数据,以GRB888格式
- EM算法(期望最大算法)实现
- 数字图像处理打开位图并查看其灰度
- 基于ITK_VTK和MFC的医学图像处理系统集
- 数字图像处理算法C语言实现.
- 基于MFC的BMP图像处理
- 图像处理-读取bmp图像均值滤波-C++
- 图像内容识别缩放 源代码 C++
- 图像处理 逆滤波处理 C/C++语言实现
- 数字图像处理原理与实践 基于Visua
- 数字图像处理 邻域平均法 C语言
- C语言写的简单均值滤波算法
- VC图像处理系列之一——图像读写篇
- 边界跟踪算法的实现,图像处理 c++
- 功能非常全的数字图像处理程序含源
- emgucv&opencv图像处理函数说明
- OpenCV+C++图像处理项目14个
- 计算图像的平均灰度值
- Visual C++数字图像处理技术详解 pdf+源
- dsp图像处理二维傅里叶变换代码实现
- 图像处理 验证码识别C++
评论
共有 条评论