opencv —— equalizeHist 直方圖均衡化實現對比度增強


直方圖均勻化簡介

從這張未經處理的灰度圖可以看出,其灰度集中在非常小的一個范圍內。這就導致了圖片的強弱對比不強烈。

直方圖均衡化的目的,就是把原始的直方圖變換為在整個灰度范圍(0~255)內均勻分布的形式,從而增加像素灰度值的動態范圍,達到增強圖像整體對比度的效果。

 

 

直方圖均衡化的列表計算

序號

運算

步驟和結果

1

列出原始圖灰度值 f(0 ≤ f ≤ L-1)

0 1 2 3 4 5 6 7
2 列出原始直方圖(概率表達) 0.02 0.05 0.09 0.12 0.14 0.2 0.22 0.16
3 計算原始累計直方圖 gf(灰度值 ≤ f 的概率和) 0.02 0.07 0.16 0.28 0.42 0.62 0.84 1.00
4 取整 g=(int) [(L-1)·gf + 0.5] 0 0 1 2 3 4 6 7
5 確定對應關系(原灰度值 -> 新灰度值) 0->0  1->0  2->1  3->2  4->3  5->4  6->6  7->7 
6 更新直方圖 0.07 0.09 0.12 0.14 0.2 0 0.22 0.16

 

實現直方圖均衡化:equalizeHist 函數

equalize 函數實現的灰度直方圖均衡化算法,就是把直方圖的每個灰度值進行歸一化處理,求每種灰度的累積分布,接着得到一個映射的灰度映射表,然后根據相應的灰度值來修正原圖中的每個像素。

void equalize(InputArray src, OutputArray dst);

  • src,輸入圖像,即源圖像,填 Mat 類的對象即可,但需要為 8 位單通道的圖像。
  • dst,輸出結果,需要和源圖像有一樣的尺寸和類型。

 

代碼示例:

#include<opencv.hpp> #include<iostream>
using namespace std; using namespace cv; int main() { Mat src = imread("C:/Users/齊明洋/Desktop/1.jpg"); imshow("src", src); Mat gray, dst; cvtColor(src, gray, COLOR_BGR2GRAY); imshow("gray", gray); equalizeHist(gray, dst); imshow("dst", dst); waitKey(0); }

效果展示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM