資源簡介
考查結構體、文件讀寫、簡單的圖像處理算法
從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?????????int?C[255]?=?{0};
????????double?P[255]?=?{0}Q[255]?=?{0};//灰度圖
????????for(int?i?=?0;?i?????????????for(int?j?=?start;?j?????????????????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?????????????for(int?j?=?start;?j?????????????????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++并行程序設計
評論
共有 條評論