import cv2 import numpy as np import matplotlib.pyplot as plt #若是画图像plt是RGB的与cv2不同 img=cv2.imread('C:/Users/59925/Desktop/pytest/pics/eye.jpg')#把图片读取成灰度图minions-s template=cv2.imread('C:/Users/59925/Desktop/pytest/pics/eye.jpg')#把图片读取成灰度图 #统计直方图。通过012选择BGR通道,None,不选择图片掩码,横坐标bins(位数)为256组,[0,256]像素值范围 plt.hist(img.ravel(),256)#把3维原图降成一维 256表示直方图的箱数 #plt.title('img.ravel') #plt.show() #生成BGR不同通道的直方图 color=['b','g','r'] plt.figure() plt.xlim([0,256]) plt.title('gbr') for i,col in enumerate(color): histo=cv2.calcHist([img],[i],None,[256],[0,256]) plt.plot(histo,color=col) #calcHist()的mask #创建mask mask=np.zeros(img.shape[:2],np.uint8) mask[50:100,100:150]=255 cv2.imshow('mask',mask) cv2.waitKey(0) cv2.destroyAllWindows() img_masked=cv2.bitwise_and(img,img,mask=mask) cv2.imshow('img_masked',img_masked) cv2.waitKey(0) cv2.destroyAllWindows() #对比有mask和没mask的直方图 plt.figure() plt.title('mask and not') histo=cv2.calcHist([img],[0],mask,[256],[0,256]) plt.plot(histo) histo=cv2.calcHist([img_masked],[i],None,[256],[0,256]) plt.plot(histo)
三维原图降成一维后展开结果:
把不同通道计算直方图,并plot.
color=['b','g','r']
plt.figure()
plt.xlim([0,256])
plt.title('gbr')
for i,col in enumerate(color):
histo=cv2.calcHist([img],[i],None,[256],[0,256])
plt.plot(histo,color=col)
mask
x.flatten()#返回拷贝
x.ravel()#返回视图(散开)
直方图均衡化后
#直方图用于均衡化
#把瘦高直方图,转化成矮胖直方图。映射函数:取整(累计概率*255)为该灰度值累计概率的新的灰度值
import cv2 import numpy as np import matplotlib.pyplot as plt #若是画图像plt是RGB的与cv2不同 img=cv2.imread('C:/Users/59925/Desktop/pytest/pics/minions-s.jpg',0)#把图片读取成灰度图minions-s equ=cv2.equalizeHist(img) plt.figure() plt.hist(equ.ravel(),color='r') plt.hist(img.ravel(),color='g') res=np.hstack((img,equ)) cv2.imshow('res',res) cv2.waitKey(0) cv2.destroyAllWindows()