深入理解OpenCV+Python直方圖均衡化
直方圖均衡化是影象處理領域中利用影象直方圖對對比度進行調整的方法。
基本思想:把原始圖的直方圖變換為均勻分 布的形式,這樣就增加了畫素灰度值的動態 範圍,從而達到增強影象整體對比度的效果。
直方圖均衡化的三種情況,分別是:
- 灰度影象直方圖均衡化
- 彩色影象直方圖均衡化
- YUV 直方圖均衡化
插入原圖:
原圖
灰度影象直方圖均衡化
對直方圖均衡化主要使用opencv提供的一個equalizeHist()方法。
import cv2 import numpy as np img = cv2.imread("linuxidc.com.jpg", 1) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow("linuxidc", gray) dst = cv2.equalizeHist(gray) cv2.imshow("linuxidc.com", dst) cv2.waitKey(0)
將灰度影象作為引數傳進equalizeHist()方法即可,效果如下:
彩色影象直方圖均衡化
彩色影象的直方圖均衡化和灰度影象略有不同,需要將彩色影象先用split()方法,將三個通道拆分,然後分別進行均衡化.最後使用merge()方法將均衡化之後的三個通道進行合併.操作如下:
import cv2 import numpy as np img = cv2.imread("linuxidc.com.jpg", 1) cv2.imshow("www.linuxidc.com", 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("linuxidc.com", result) cv2.waitKey(0)
均衡化之後的效果如下:
YUV 直方圖均衡化
import cv2 import numpy as np img = cv2.imread("linuxidc.com.jpg", 1) imgYUV = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb) cv2.imshow("linuxidc.com", img) channelsYUV = cv2.split(imgYUV) channelsYUV[0] = cv2.equalizeHist(channelsYUV[0]) channels = cv2.merge(channelsYUV) result = cv2.cvtColor(channels, cv2.COLOR_YCrCb2BGR) cv2.imshow("www.linuxidc.com", result) cv2.waitKey(0)
均衡化之後效果如下:
更多Python相關資訊見 Python 專題頁面 https://www.linuxidc.com/topicnews.aspx?tid=17
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2019-05/158620.htm