加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

【python opencv】二维直方图

发布时间:2020-12-20 09:52:55 所属栏目:Python 来源:网络整理
导读:我们计算并绘制了一维直方图。 之所以称为一维,是因为我们仅考虑一个特征,即像素的灰度强度值。 但是在二维直方图中,您要考虑两个特征。 通常,它用于查找颜色直方图,其中两个特征是每个像素的色相和饱和度值。我们将尝试了解如何创建这种颜色直方图,这

我们计算并绘制了一维直方图。 之所以称为一维,是因为我们仅考虑一个特征,即像素的灰度强度值。 但是在二维直方图中,您要考虑两个特征。 通常,它用于查找颜色直方图,其中两个特征是每个像素的色相和饱和度值。我们将尝试了解如何创建这种颜色直方图,这对于理解诸如直方图反向投影之类的更多主题将很有用。

OpenCV中的二维直方图

它非常简单,并且使用相同的函数cv.calcHist()进行计算。 对于颜色直方图,我们需要将图像从BGR转换为HSV。(请记住,对于一维直方图,我们从BGR转换为灰度)。对于二维直方图,其参数将进行如下修改:

  • channel = [0,1]因为我们需要同时处理H和S平面。
  • bins = [180,256]?对于H平面为180,对于S平面为256。
  • range = [0,180,256]?色相值介于0和180之间,饱和度介于0和256之间。

现在检查以下代码:

import numpy as np
 cv2 as cv
img = cv.imread('home.jpg')
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
hist = cv.calcHist([hsv],[0,1],None,[180,256],256])

原始图像:

处理之后:

Numpy中的二维直方图

Numpy还为此提供了一个特定的函数:np.histogram2d()。(记住,对于一维直方图我们使用了np.histogram())。

hsv =]
hist,xbins,ybins = np.histogram2d(h.ravel(),s.ravel(),[[0,180],256]])
cv2_imshow(hist)

第一个参数是H平面,第二个是S平面,第三个是每个箱子的数量,第四个是它们的范围。

绘制二维直方图

方法1:使用 cv.imshow()

我们得到的结果是尺寸为80x256的二维数组。因此,可以使用cv.imshow()函数像平常一样显示它们。它将是一幅灰度图像,除非您知道不同颜色的色相值,否则不会对其中的颜色有太多了解。

方法2:使用Matplotlib

我们可以使用matplotlib.pyplot.imshow()函数绘制具有不同颜色图的2D直方图。它使我们对不同的像素密度有了更好的了解。但是,除非您知道不同颜色的色相值,否则乍一看并不能使我们知道到底是什么颜色。我还是更喜欢这种方法。它简单而更好。

注意?使用此功能时,请记住,插值法应采用最近邻以获得更好的结果。

考虑下面的代码:

hsv =] )
plt.imshow(hist,interpolation = nearest)
plt.show()

在直方图中,您可以在H = 100和S = 200附近看到一些较高的值。它对应于天空的蓝色。同样,在H = 25和S = 100附近可以看到另一个峰值。它对应于宫殿的黄色。您可以使用GIMP等任何图像编辑工具进行验证。

?

参考:

http://woshicver.com/FifthSection/4_10_3_%E7%9B%B4%E6%96%B9%E5%9B%BE3%EF%BC%9A%E4%BA%8C%E7%BB%B4%E7%9B%B4%E6%96%B9%E5%9B%BE/?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读