python中OpenCV如何绘制直方图

  介绍

这篇文章主要介绍python中OpenCV如何绘制直方图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

直方图会让你对图像的强度分布有一个全面的认识。它是一个在x轴上带有像素值(从0到255,但不总是),在y轴上的图像中对应的像素数量的图。

这只是理解图像的另一种方式。通过观察图像的直方图,你可以直观地看到图像的对比度,亮度,强度分布等。现在几乎所有的图像处理工具都提供了直方图的特性。下面是剑桥彩色网站的图片,建议去访问这个网站,了解更多细节。

 python中OpenCV如何绘制直方图

你可以看到图像和它的直方图。(这个直方图是用灰度图像绘制的,而不是彩色图像)。直方图的左边部分显示了图像中较暗像素的数量,右边区域显示了更明亮的像素。从直方图中可以看的到,深色区域的像素数量比亮色区域更多,而中间色调的数量(中值大约在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()> 嘘=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 ()

 python中OpenCV如何绘制直方图

或者你可以用正常的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 ()

 python中OpenCV如何绘制直方图”>,<br/> </p> <p>你可以从上面的图中扣除,蓝色在图像中有一些高值区域(很明显,它应该是由天空引起的)</p> <p> <强> 2,使用OpenCV </强> </p> <p>这里,你可以调整直方图的值和它的本值,让它看起来像x, y坐标,这样你就可以用cv.line()或cv.polyline()函数来绘制它,从而生成与上面相同的图像。这已经是OpenCV-Python2官方的样本了。检查sampl/python/hist.py的代码。<h2 class=python中OpenCV如何绘制直方图