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