about
本文参考了
灰色图片直方图均衡化
代码实现
import numpy as np
import cv2
im = cv2.imread('vi.jpg',0) #当前目录下的图片: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) #保存图片在当前目录下
显示结果
原始图片
vi.jpg
直方图均衡化后
vi2.jpg
但是cv2.equalizeHist()只提供灰度值图片的处理,当把上面的图片换成RGB图片时,就会报错了。
...
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
网上一查:
有同学说,
cv2.equalizeHist only works on grayscale ( 1 channel ) images
官网是这么描述的:
Equalizes the histogram of a grayscale image.
解决方案请往下看
彩色图片直方图均衡化
有兴趣的同学可以简单看下这么做的原理是什么:
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