python+opencv直方圖均衡化

前言

直方圖均衡化的三種情況,分別是:
- 灰度圖像直方圖均衡化
- 彩色圖像直方圖均衡化
- YUV 直方圖均衡化
插入原圖:

原圖

灰度圖像直方圖均衡化

對直方圖均衡化主要使用opencv提供的一個equalizeHist()方法.

import cv2
import numpy as np

img = cv2.imread("1.jpg", 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("src", gray)

dst = cv2.equalizeHist(gray)
cv2.imshow("dst", dst)

cv2.waitKey(0)

將灰度圖像作爲參數傳進equalizeHist()方法即可,效果如下:

灰度圖像直方圖均衡化

彩色圖像直方圖均衡化

彩色圖像的直方圖均衡化和灰度圖像略有不同,需要將彩色圖像先用split()方法,將三個通道拆分,然後分別進行均衡化.最後使用merge()方法將均衡化之後的三個通道進行合併.操作如下:

import cv2
import numpy as np

img = cv2.imread("1.jpg", 1)
cv2.imshow("src", img)

# 彩色圖像均衡化,需要分解通道 對每一個通道均衡化
(b, g, r) = cv2.split(img)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合併每一個通道
result = cv2.merge((bH, gH, rH))
cv2.imshow("dst", result)

cv2.waitKey(0)

均衡化之後的效果如下:

彩色圖片直方圖均衡化

YUV 直方圖均衡化

import cv2
import numpy as np
img = cv2.imread("1.jpg", 1)

imgYUV = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
cv2.imshow("src", img)

channelsYUV = cv2.split(imgYUV)
channelsYUV[0] = cv2.equalizeHist(channelsYUV[0])

channels = cv2.merge(channelsYUV)
result = cv2.cvtColor(channels, cv2.COLOR_YCrCb2BGR)
cv2.imshow("dst", result)

cv2.waitKey(0)

均衡化之後效果如下:

yuv均衡化

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章