Python OpenCV实例:图像直方图均衡化(数学公式简单实现)
生活随笔
收集整理的這篇文章主要介紹了
Python OpenCV实例:图像直方图均衡化(数学公式简单实现)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
為什么80%的碼農(nóng)都做不了架構師?>>> ??
#coding:utf-8 ''' 直方圖均衡化 作用:通常用來增加圖像局部對比度,尤其在圖像的有用數(shù)據(jù)的對比度相當接近時,通過直方圖均衡化,圖像的亮度可以更好地在直方圖上分布 基本思想:把原始圖像的直方圖變換為均勻分布的形式,增加了像素灰度值的動態(tài)范圍,從而增強圖像的整體對比度效果算法實現(xiàn)步驟: 1、計算圖像f的各個灰度級中像素出現(xiàn)的概率p(i) = n(i) / n ,{i|0,1,...,L - 1}其中:n(i)表示灰度級i出現(xiàn)的次數(shù),L是圖像中所有的灰度數(shù),p實際上是圖像的直方圖歸一化到0~1范圍內(nèi),如果把c作為對應p的累計概率函數(shù),則定義為:ic(i) = ∑(p(x(j))j=0c是圖像的累計歸一化直方圖2、創(chuàng)建一個形式為 y = T(x)的變化,原始圖像中的每個值就生產(chǎn)一個y,這樣y的累計概率函數(shù)形式就可以在所有值范圍內(nèi)進行線性化,轉(zhuǎn)換公式為:y(i) = T(x(i)) = c(i) '''import cv2 import numpy as npdef hist_eq(image):img_gray = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)rows,cols = img_gray.shapegray_flat = img_gray.reshape((rows*cols,))dist_flat = np.zeros_like(gray_flat)count_pixel = np.zeros((256,),np.int32)temp = np.zeros((256,),np.int32)pixmap = np.zeros((256,),np.uint8)image_bytes = cols * rows# 計算各個灰度級數(shù)量for index,value in enumerate(gray_flat):count_pixel[value] += 1# 計算灰度級的累計分布for i in range(256):if i == 0:temp[0] = count_pixel[0]else:temp[i] = temp[i - 1] + count_pixel[i]# 計算累計概率函數(shù),并把值擴展到0~255value = 255.0 * (temp[i] / image_bytes)if value > 255:value = 255if value < 0:value = 0pixmap[i] = value# 灰度等級映射轉(zhuǎn)換for i in range(image_bytes):dist_flat[i] = pixmap[gray_flat[i]]dist = dist_flat.reshape((rows,cols))return distsrc = cv2.imread('datas/l1.jpg') gray = cv2.cvtColor(src,cv2.COLOR_RGB2GRAY)dist = hist_eq(src)# 調(diào)用OpenCV函數(shù) dist_cv = np.zeros_like(gray) cv2.equalizeHist(gray,dist_cv)cv2.imshow('src',gray) cv2.imshow('dist',dist) cv2.imshow('opencv-histeq',dist_cv) cv2.waitKey() cv2.destroyAllWindows()?
轉(zhuǎn)載于:https://my.oschina.net/wujux/blog/1798044
總結
以上是生活随笔為你收集整理的Python OpenCV实例:图像直方图均衡化(数学公式简单实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 8 CompletableFu
- 下一篇: GIT常用的基础命令