Histograms
0-255说明你需要256个点来描述一个直方图
术语
-
BINS:上面的直方图显示每个像素值的像素数量,即从0到255。举个例子,如果将直方图分成16份,那么每一份就是一个组,也就是16个像素;我们把这一个组称之为
BIN
- DIMIS:收集数据的参数数量,这个例子中我们只收集关于一个东西的数据,强度值这里是1。
直方图均衡
import cv2
def histogramEqualizeColor(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
自适应直方图均衡
# -*-coding:utf-8-*-
import cv2
import numpy as np
# 自适应直方图均衡
def histogram_adapting_equal(image):
'''
:param image:输入的图片,需要是opencv的灰度单通道图
:return: 直方图均衡处理后图
'''
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8))
cll = clahe.apply(image)
return cll
直方图拉伸
# -*-coding:utf-8-*-
import cv2
import numpy as np
def histogram_scale_color(img, minBinNo=0, maxBinNo=250):
# 使用Numpy函数计算直方图
# hist, bins = np.histogram(img.flatten(), 256, [0, 256])
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
lut = np.zeros(256, dtype=img.dtype) # 创建空的查找表
# 计算从左边起第一个不为0的直方图位置
for binNo, binValue in enumerate(hist):
if binValue != 0:
# minBinNo = binNo
break
# 计算从右边起第一个不为0的直方图位置
for binNo, binValue in enumerate(hist):
if binValue != 0:
# maxBinNo = 255 - binNo
break
print 'minBinNo : ', minBinNo, ' , maxBinNo : ', maxBinNo
for i, v in enumerate(lut):
if i < minBinNo:
print '小于minBinNo, 赋值为0'
lut[i] = 0
elif i > maxBinNo:
print '大于maxBinNo, 赋值为255'
lut[i] = 255
else:
lut[i] = int(255.0 * (i - minBinNo) / (maxBinNo - minBinNo) + 0.5)
result = cv2.LUT(img, lut)
return result
网友评论