这篇文章主要介绍python中OpenCV如何绘制直方图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
直方图会让你对图像的强度分布有一个全面的认识。它是一个在x轴上带有像素值(从0到255,但不总是),在y轴上的图像中对应的像素数量的图。
这只是理解图像的另一种方式。通过观察图像的直方图,你可以直观地看到图像的对比度,亮度,强度分布等。现在几乎所有的图像处理工具都提供了直方图的特性。下面是剑桥彩色网站的图片,建议去访问这个网站,了解更多细节。
你可以看到图像和它的直方图。(这个直方图是用灰度图像绘制的,而不是彩色图像)。直方图的左边部分显示了图像中较暗像素的数量,右边区域显示了更明亮的像素。从直方图中可以看的到,深色区域的像素数量比亮色区域更多,而中间色调的数量(中值大约在127左右)则少得多。
<强>直方图强>
现在我们已经知道了什么是直方图,我们可以看看如何找到它.OpenCV和Numpy都有内置的功能。在使用这些函数之前,我们需要了解一些与直方图相关的术语。
垃圾箱:上面的直方图显示了每个像素值的像素数,从0到255。您需要256个值来显示以上的直方图。但是,考虑一下,如果您不需要单独查找所有像素值的像素数量,而是在一个像素值区间内的像素数量,该怎么办?例如,你需要找到介于0到15之间的像素数,然后是16日到31日……240到255。您只需要16个值来表示这个直方图.OpenCV教程> img =, cv.imread (& # 39; home.jpg& # 39;,, 0) hist =, cv.calcHist ([img],[0],,没有,,[256],[0256])
嘘是一个256年x1阵列,每个值对应于该图像中的像素值及其对应的像素值。
<强> Numpy中直方图的计算强>
Numpy中提供了<代码> np.histogram() 代码>方法
,嘘,bins =, np.histogram (img.ravel(), 356年,[0256])
嘘和之前计算的一样。但是垃圾箱有257个元素,因为Numpy计算垃圾箱是以0 - 0.99,1 - 1.99等,所以最后一个是255 - 255.99。为了表示这一点,他们还在垃圾箱的末端添加了256。但我们不需要256年。到255年就足够了。
Numpy还有另一个函数,<代码> np.bincount()> 代码,比<代码> np.histograme()> 代码要快得多(大约10倍)。对于一维直方图,你可以试一下。不要忘记在np.bincount中设置最小长度=256。例如,<代码>嘘=np.bincount (img.ravel(),最小长度=256)代码>
OpenCV函数比<代码> np.histogram() 代码>快(大约40 x)。所以坚持用OpenCV函数。
<强>绘制直方图强>
<强> 1,使用Matplotlib 强>
Matplotlib有一个绘制直方图的函数:<代码> matplotlib.pyplot.hist() 代码>
它直接找到了直方图并绘制了它。您不需要使用<代码> calcHist() 代码>或<代码> np.histogram() 代码>函数来找到直方图。看下面的代码:
import numpy as np import cv2  as 简历 得到matplotlib import  pyplot as  plt 时间=img cv.imread (& # 39; home.jpg& # 39;,, 0) plt.hist (img.ravel(), 256年,[0256]) plt.show ()
或者你可以用正常的matplotlib,这对BGR的情节很有帮助。为此,您需要首先找到直方图数据。试试下面的代码:
import numpy as np import cv2  as 简历 得到matplotlib import  pyplot as  plt 时间=img cv.imread (& # 39; home.jpg& # 39;) color =, (& # 39; b # 39;,, & # 39;舌鳎# 39;,,& # 39;" # 39;) for 我,col 拷贝;列举(颜色): histr 才能=,cv.calcHist ([img],[我],,没有,,[256],[0256]) plt.plot才能(histr,颜色=坳) plt.xlim才能([0256]) plt.show ()