Um histograma imagem Avaliação da função: cv2.calcHist ()
cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]]) ->hist
imaes: Imagem de entrada
canais: Uma imagem canais
mascarar: Máscara, e é um tamanho igual a np matriz de imagem, em que a porção específica para ser processado é 1, especifica que nenhuma parte do processamento é zero, tipicamente definido como Nenhum, que mostra todo o processamento de imagem
HISTSIZE: Utilizar o número de bin (colunas), tipicamente 256
gamas: Intervalo de valores de pixel, geralmente [0, 255] é de 0 a 255
por trás dos dois parâmetros básicos do tubo.
Note-se que na máscara disso, os outros quatro parâmetros tive que tomar número [].
img = cv2.imread('cat.jpg',0) #0表示灰度图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
hist.shape#(256, 1)
1, sem parâmetros de máscara
img = cv2.imread('cat.jpg')
color = ('b','g','r')
for i,col in enumerate(color):
histr = cv2.calcHist([img],[i],None,[256],[0,256])
plt.plot(histr,color = col)
plt.xlim([0,256])
2, usando o parâmetro de máscara
# 创建mask
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:300, 100:400] = 255
img = cv2.imread('cat.jpg', 0)
masked_img = cv2.bitwise_and(img, img, mask=mask)#与操作
hist_full = cv2.calcHist([img], [0], None, [256], [0, 256])
hist_mask = cv2.calcHist([img], [0], mask, [256], [0, 256])
plt.subplot(221), plt.imshow(img, 'gray')
plt.subplot(222), plt.imshow(mask, 'gray')
plt.subplot(223), plt.imshow(masked_img, 'gray')
plt.subplot(224), plt.plot(hist_full), plt.plot(hist_mask)
plt.xlim([0, 256])
plt.show()
Em segundo lugar, a função de imagem histograma de equalização: cv2.equalizeHist () e cv2.createCLAHA ()
Histograma equalização descrito
histograma equalização é uma técnica simples e eficaz de melhoramento de imagem, uma imagem é mudada mudando a gradação de cada pixel do histograma da imagem, a gama dinâmica usada para melhorar o contraste da imagem é pequena. Devido à sua distribuição de intensidade de imagem original pode ser concentrado em um intervalo estreito, imagem resultante não é suficientemente claro. Por exemplo, os níveis de cinzento da imagem sobre-exposição é concentrada numa gama alta luminância, mas irá causar nível cinzento imagem subexposto na gama baixa luminância concentrada. Usando a equalização de histograma, o histograma pode ser imagem original convertido é uma forma de distribuição uniforme (equilibrado), aumentando assim o valor da diferença entre o intervalo dinâmico escala de cinzentos do pixel, de modo a atingir o efeito de aumentar o contraste da imagem inteira. Em outras palavras, o princípio básico de equalização de histograma é: O número de pixels no valor gradação de imagem (ou seja, a imagem desempenhar um valor importante papel gradação) para a ampliação e o menor número de valores em escala de cinza do pixel (ou seja, não desempenham um papel importante na mesclagem valor gradação de imagem), aumentando assim o contraste, nitidez de imagem, atingir o objectivo de reforçada.
cv2.equalizeHist(img)
Parâmetros: representação img da imagem de entrada
img = cv2.imread('clahe.jpg',0) #0表示灰度图
plt.hist(img.ravel(),256);
plt.show()
equ = cv2.equalizeHist(img)
plt.hist(equ.ravel(),256)
plt.show()
res = np.hstack((img,equ))
cv_show(res,'res')
Esta equalização global vai haver alguns problemas, devido ao brilho geral do elevador, de modo que os detalhes da imagem parcial ficará embaçada; por isso podemos usar equalização melhor adaptativa
cv2.createCLAHA(clipLimit=8.0, titleGridSize=(8, 8))
Parâmetros: clipLimit limiar de contraste de cor, titleGridSize equalização tamanho da grade pixel, isto é, uma operação de equalização de histograma em muito malha
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
res_clahe = clahe.apply(img)
res = np.hstack((img,equ,res_clahe))
cv_show(res,'res')
Pode ser visto equalização adaptativa não fez os detalhes de rostos de pessoas desaparecem