C語言實(shí)現(xiàn)BMP圖像處理(直方圖均衡化)
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)BMP圖像直方圖均衡化處理的具體代碼,供大家參考,具體內(nèi)容如下
計(jì)算步驟:
1)統(tǒng)計(jì)各灰度值的概率;
2)計(jì)算了累積概率直方圖(CDF);
3)取整擴(kuò)展:Tk = int[ (L-1)*Tk];
#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main(int* argc, char** argv)
{
FILE* fp = fopen("./01.bmp", "rb");
if (fp == 0)
return 0;
BITMAPFILEHEADER fileHead;
fread(&fileHead, sizeof(BITMAPFILEHEADER), 1, fp);
BITMAPINFOHEADER infoHead;
fread(&infoHead, sizeof(BITMAPINFOHEADER), 1, fp);
int width = infoHead.biWidth;
int height = infoHead.biHeight;
int biCount = infoHead.biBitCount;
int lineByte = (biCount*width / 8 + 3) / 4 * 4;
RGBQUAD* pColorTable;
pColorTable = new RGBQUAD[256];
fread(pColorTable, sizeof(RGBQUAD), 256, fp);
unsigned char* pBmpBuf;
pBmpBuf = new unsigned char[lineByte*height];
fread(pBmpBuf, lineByte*height, 1, fp);
fclose(fp);
// 統(tǒng)計(jì)概率
double st[256] = { 0 };
int st1[256] = { 0 };
int t;
for (int i = 0; i < height; ++i){
for (int j = 0; j < width; ++j){
t = *(pBmpBuf + i*lineByte + j);
st[t]++;
}
}
// 計(jì)算累加直方圖并完成映射
st[0] = st[0] / (width*height);
st1[0] = round(double((256 - 1)*st[0]));
for (int i = 1; i < 256; ++i){
st[i] = st[i] / (width*height);
st[i] = st[i] + st[i - 1];
st1[i] = int(round(double((256 - 1)*st[i])));
printf("st[i] = %d, st1[t] = %d\n", st[i], st1[i]);
}
// 新圖像的像素填充
unsigned char* pBmpBuf1;
pBmpBuf1 = new unsigned char[lineByte*height];
for (int i = 0; i < height; ++i){
for (int j = 0; j < width; ++j){
t = *(pBmpBuf + i*lineByte + j);
*(pBmpBuf1 + i*lineByte + j) = st1[t];
}
}
FILE* fop = fopen("./imhist.bmp", "wb");
if (fop == 0)
return 0;
fwrite(&fileHead, sizeof(BITMAPFILEHEADER), 1, fop);
fwrite(&infoHead, sizeof(BITMAPINFOHEADER), 1, fop);
fwrite(pColorTable, sizeof(RGBQUAD), 256, fop);
fwrite(pBmpBuf1, lineByte*height, 1, fop);
fclose(fop);
system("pause");
return 0;
}
實(shí)驗(yàn)結(jié)果:

實(shí)驗(yàn)結(jié)果分析:對(duì)比原圖與實(shí)驗(yàn)結(jié)果圖,原圖中,頭發(fā)和衣領(lǐng)處灰度值較低的地方在結(jié)果圖中灰度值更低,而原圖中,額頭中間偏右處較亮,在結(jié)果圖中更亮,灰度值更大。整體上直方圖均衡化拉伸了全局對(duì)比度。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Qt+Quick實(shí)現(xiàn)播放音樂和視頻的開發(fā)
這篇文章主要為大家詳細(xì)介紹了如何利用Qt+Quick實(shí)現(xiàn)播放音樂和視頻的開發(fā),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03
利用stream實(shí)現(xiàn)一個(gè)簡(jiǎn)單的http下載器
這篇文章主要介紹了利用stream實(shí)現(xiàn)一個(gè)簡(jiǎn)單的http下載器的相關(guān)資料,需要的朋友可以參考下2015-03-03
linux c 獲得當(dāng)前進(jìn)程的進(jìn)程名和執(zhí)行路徑(示例)
如何得到當(dāng)前進(jìn)程的進(jìn)程名和執(zhí)行路徑。寫了個(gè)程序分享一下2013-07-07
C語言實(shí)現(xiàn)ATM自動(dòng)取款機(jī)系統(tǒng)的示例代碼
ATM自動(dòng)取款機(jī)系統(tǒng)是銀行業(yè)務(wù)流程中十分重要且必備的環(huán)節(jié)之一,在銀行業(yè)務(wù)流程中起著承上啟下的作用。本文將用C語言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的ATM自動(dòng)取款機(jī)系統(tǒng),需要的可以參考一下2022-08-08
C語言實(shí)現(xiàn)雙人貪吃蛇游戲?qū)嵗a
大家好,本篇文章主要講的是C語言實(shí)現(xiàn)雙人貪吃蛇游戲?qū)嵗a,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
C++實(shí)現(xiàn)求動(dòng)態(tài)矩陣各元素的和
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)求動(dòng)態(tài)矩陣各元素的和,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
全面了解#pragma once與 #ifndef的區(qū)別
下面小編就為大家?guī)硪黄媪私?pragma once與 #ifndef的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08

