opencv 直方图/ 均衡化

Posted Aneverforget

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv 直方图/ 均衡化相关的知识,希望对你有一定的参考价值。

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()

  

 

 均衡化会更亮一些,但会丧失一些细节——采用局部(分格)均衡化的方法——但如果局部做,噪音产生的影响变大。而且格子之间的分解会很明显。

所以需要根据图片恒量。

opencv提供自适应均衡化,并对格子之间的边界做些优化处理。

以上是关于opencv 直方图/ 均衡化的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 完整例程46. 直方图均衡化

OpenCV---直方图的应用(均衡化和图像比较)

(转)OpenCV图像增强算法实现(直方图均衡化拉普拉斯LogGamma)

opencv:图像直方图均衡化

OpenCV——直方图均衡化(用于图像增强)

Python,OpenCV直方图均衡化以提高图像对比度