资源简介
考查结构体、文件读写、简单的图像处理算法
从bmp文件(如灰度图像woman.bmp、彩色图像lenna.bmp)读入图像数据
对图像数据进行均衡处理
将均衡处理后的图像数据保存为新的bmp文件
要求编程只使用C语言自带库
功能
必做功能1:灰度图像的直方图均衡
必做功能2:彩色图像的直方图均衡
代码片段和文件信息
#include
#include
#include
#pragma pack(1) //取消对齐,如果不取消的话 sizeof(BITMAPFILEHEADER)就是16,而不是14
using namespace std;
typedef short int UINT16;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int DWORD;
typedef long LONG;
typedef struct tagBITMAPFILEHEADER{
WORD bfType;//文件类型,必须是0x424D,即字符“BM” 这个属性必须注释掉,不然由于内存对齐的影响后面会出错
DWORD bfSize;//文件大小
WORD bfReserved1;//保留字
WORD bfReserved2;//保留字
DWORD bfOffBits;//从文件头到实际位图数据的偏移字节数
}BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;//信息头大小
LONG biWidth;//图像宽度
LONG biHeight;//图像高度
WORD biPlanes;//位平面数,必须为1
WORD biBitCount;//每像素位数
DWORD biCompression; //压缩类型
DWORD biSizeImage; //压缩图像大小字节数
LONG biXPelsPerMeter; //水平分辨率
LONG biYPelsPerMeter; //垂直分辨率
DWORD biClrUsed; //位图实际用到的色彩数
DWORD biClrImportant; //本位图中重要的色彩数
}BITMAPINFOHEADER; //位图信息头定义
typedef struct tagRGBQUAD{
BYTE rgbBlue; //该颜色的蓝色分量
BYTE rgbGreen; //该颜色的绿色分量
BYTE rgbRed; //该颜色的红色分量
BYTE rgbReserved; //保留值
}RGBQUAD;//调色板定义
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
}BITMAPINFO *LPBITMAPINFO *PBITMAPINFO;
typedef struct tagIMAGEDATA//像素信息
{
BYTE blue;
BYTE green;
BYTE red;
}IMAGEDATA;
void bmpTransform(const BITMAPINFOHEADER &bmpInfounsigned char* data)
{
int BPP = bmpInfo.biBitCount;//BPP(Bits Per Pixel)每像素的比特数
int Width = bmpInfo.biWidth;//每行的像素数
int Height = bmpInfo.biHeight;
int RowSize = 4*(BPP*Width/32);//每行的字节数
int channels = BPP/8;//每个像素字节数也就是几个颜色通道
for(int start = 0; start < channels; start++){
int C[255] = {0};
double P[255] = {0}Q[255] = {0};//灰度图
for(int i = 0; i < Height; i++){
for(int j = start; j < RowSize; j += channels){//idx为递增量
unsigned char k = data[RowSize*i+j];//我这里改成unsigned int都会出错不知道为什么别人的没错
C[k]++;
}
}
//P
for(int i = 0; i < 255; i++) P[i] = (double)C[i]/(Width*Height);
//Q
Q[0] = P[0];
for(int i = 1; i < 255; i++) Q[i] = Q[i-1] + P[i];
//dataX
for(int i = 0; i < Height; i++){
for(int j = start; j < RowSize; j += channels){//idx为递增量
unsigned char k = data[RowSize*i+j];
data[RowSize*i+j] = round(255*Q[k]);
}
}
}
}
int main(int argc char* argv[])
{
int a = sizeof(BITMAPFILEHEADER);
BITMAPFILEHEADER bmpFile;
BITMAPINFOHEADER bmpInfo;
RGBQUAD* colorTable;
string inFileName;
string outFileName;
switch(argc){
case 1:
cout << “File name of the image to be processed:“;
cin >> inFileName;
outFileName = string(inFileName).insert(inFileName.find(“.“)“_eq“);//insert会改变原string,这里先拷贝一份后进行insert
break;
case 2:
inFileName = argv[1];//ar
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-03-06 23:30 2018C语言大作业_图像直方图均衡算法的实现\
文件 1727074 2018-12-21 16:03 2018C语言大作业_图像直方图均衡算法的实现\2018C语言大作业_图像直方图均衡算法的实现.pptx
文件 786486 2008-05-31 22:36 2018C语言大作业_图像直方图均衡算法的实现\lenna.bmp
文件 66614 2018-12-15 17:31 2018C语言大作业_图像直方图均衡算法的实现\woman.bmp
目录 0 2019-03-06 23:30 2018C语言大作业_图像直方图均衡算法的实现\项目文件\
目录 0 2019-03-06 23:30 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\
文件 17 2019-02-03 21:44 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\1.bin
目录 0 2019-03-06 23:30 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\bin\
目录 0 2019-03-06 23:30 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\bin\Debug\
文件 1962696 2019-02-11 16:30 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\bin\Debug\bmp_img.exe
文件 66614 2019-02-11 16:32 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\bin\Debug\woman.bmp
文件 1071 2019-02-03 21:20 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\bmp_img.cbp
文件 124 2019-02-11 16:29 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\bmp_img.depend
文件 361 2019-02-11 16:34 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\bmp_img.layout
文件 786486 2008-05-31 22:36 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\lenna.bmp
文件 6372 2019-02-11 16:30 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\main.cpp
目录 0 2019-03-06 23:30 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\obj\
目录 0 2019-03-06 23:30 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\obj\Debug\
文件 45512 2019-02-11 16:30 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\obj\Debug\main.o
目录 0 2019-03-06 23:30 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\test\
文件 1860 2019-02-10 19:03 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\test\1.cpp
文件 400281 2019-02-10 19:03 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\test\1.exe
文件 5682 2019-02-10 21:16 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\test\2.cpp
文件 66614 2019-02-10 21:08 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\test\imhist.bmp
文件 66614 2018-12-15 17:31 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\test\woman.bmp
文件 14 2019-02-03 22:00 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\TEST.$$$
文件 786486 2019-02-11 16:03 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\test.bmp
文件 66614 2018-12-15 17:31 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\woman.bmp
文件 66614 2019-02-11 16:32 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\woman2.bmp
文件 66614 2019-02-11 16:30 2018C语言大作业_图像直方图均衡算法的实现\项目文件\bmp_img\woman_eq.bmp
- 上一篇:最简单的c++播放音乐源代码
- 下一篇:C++并行程序设计
相关资源
- C++并行程序设计
- 最简单的c++播放音乐源代码
- 百度OCR文字识别依赖库-libcurl、opens
- 学生信息管理系统MFC,VC++6.0,Access数
- Vtcp 5.0版本C++源代码
- Effective Modern C++ PDF完整版(英文)
- Microsoft Visual C++ 2008 SP1 Redistributable
- VC++的MFC计算机图形学点线多边形裁剪
- MFC时钟 VS2008
- 图书管理信息系统课程设计 C++ MFC
- USB视频设备采集图像VisualC
- 决策树C4.5算法的c++实现
- 信号处理常用C++库
- deep learning卷积神经网络CNN在C++环境下
- VC++6.0MFC扫雷程序
- FIr滤波器的设计基于VC++
- VisualC++程序设计案例教程高清版(P
- SP++ 3.0信号处理工具包
- 分水岭算法VC++实现
- 银行排号系统MFC实现和控制台实现
- vc++2010学习版 最新版Microsoft Visual C+
-
Inside_the_C++_ob
ject_Model - VC++编写的科学计算器
- 动画编程 人体骨骼运动Forward Kinemat
- C++网络编程文件之第七章 网络层协议
- C++ Primer第四版中文高清非扫描版
- 谭浩强c++第二章例题
- c++FTP上传程序源代码
- KNN分类算法C++实现十次十倍交叉验证
- 图书管理系统C++数据结构
评论
共有 条评论