• 大小: 4.67MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-16
  • 语言: C/C++
  • 标签: bmp  c++  

资源简介

考查结构体、文件读写、简单的图像处理算法 从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

评论

共有 条评论