概念
选取像素点、统计个数
(256,1)
256:0-255
1:每个值里面:0出现多少个,1多少个,255多少个
import cv2
img = cv2.imread('girl.png',0)#0表示灰度图
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
hist = cv2.calcHist([img],[0],None,[256],[0,256])
hist.shape
import matplotlib.pyplot as plt
plt.hist(img.ravel(),256)
plt.show()
img = cv2.imread('girl.png')
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])
创建mask
#创建mask
import numpy as np
mask = np.zeros(img.shape[:2],np.uint8)
print(mask.shape)
mask[50:300,50:300] = 255
cv_show(mask,'mask')
img = cv2.imread('girl.png',0)#灰度图
cv_show(img,'img')
masked_img = cv2.bitwise_and(img,img,mask=mask)#与操作
cv_show(masked_img,'masked_img')
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()
直方图说白了就是统计每个像素点有多少个
直方图均衡化
img = cv2.imread('girl.png',0)#取灰度图 #clahe
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')
因此可以做自适应均衡化
自适应直方图均衡化
通过小格子自己做自己的,然后化为整体。但是这样子做完之后,每个小个子的边界会很明显,但是opencv自己会优化
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')