about
本文參考了
- sunny2038同學(xué)的OpenCV Python教程(1、圖像的載入、顯示和保存)
- jnulzl同學(xué)的openCV—Python(8)—— 圖像直方圖及其直方圖-均衡化
- OpenCV documentationHistograms
- StackOverflow的Error using cv2.equalizeHist
- StackOverflow的Histogram equalization not working on color image - OpenCV
- PERPETUAL ENIGMA同學(xué)的Histogram Equalization Of RGB Images
灰色圖片直方圖均衡化
- 代碼實(shí)現(xiàn)
import numpy as np
import cv2
im = cv2.imread('vi.jpg',0) #當(dāng)前目錄下的圖片:vi.png
cv2.imshow('image1', im)
cv2.waitKey(0)
eq = cv2.equalizeHist(im) #灰度圖片直方圖均衡化
cv2.imshow('image2',eq)
cv2.waitKey(0)
cv2.imwrite('vi2.jpg',eq) #保存圖片在當(dāng)前目錄下
- 顯示結(jié)果
原始圖片
vi.jpg
直方圖均衡化后
vi2.jpg
- 但是cv2.equalizeHist()只提供灰度值圖片的處理,當(dāng)把上面的圖片換成RGB圖片時(shí),就會(huì)報(bào)錯(cuò)了。
...
eq = cv2.equalizeHist(image)
cv2.error: /usr/local/opencv-3.1.0/modules/imgproc/src/histogram.cpp:3687: error: (-215) _src.type() == CV_8UC1 in function equalizeHist
- 網(wǎng)上一查:
有同學(xué)說,
cv2.equalizeHist only works on grayscale ( 1 channel ) images
- 官網(wǎng)是這么描述的:
Equalizes the histogram of a grayscale image.
- 解決方案請(qǐng)往下看
彩色圖片直方圖均衡化
有興趣的同學(xué)可以簡(jiǎn)單看下這么做的原理是什么:
PERPETUAL ENIGMA同學(xué)的Histogram Equalization Of RGB Images
代碼實(shí)現(xiàn)
import numpy as np
import cv2
def hisEqulColor(img):
ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB)
channels = cv2.split(ycrcb)
print len(channels)
cv2.equalizeHist(channels[0], channels[0])
cv2.merge(channels, ycrcb)
cv2.cvtColor(ycrcb, cv2.COLOR_YCR_CB2BGR, img)
return img
im = cv2.imread('lena.jpg')
cv2.imshow('im1', im)
cv2.waitKey(0)
eq = hisEqulColor(im)
cv2.imshow('image2',eq )
cv2.waitKey(0)
cv2.imwrite('lena2.jpg',eq)
- 原來圖片
lena.jpg
直方圖均衡化后
lena2.jpg