首页 > 编程语言 > 详细

OpenCV-Python : 直方图

时间:2019-04-16 12:41:53      阅读:305      评论:0      收藏:0      [点我收藏+]

啥叫直方图

直方图简单来说就是图像中每个像素值的个数统计,比如一副灰度图中像素值为0的有多少个,1的有多少个...

技术分享图片

在计算直方图之前,先了解几个术语:

  • dims:要计算的通道数,对于灰度图dims=1,普通彩色图dims=3
  • range:要计算的像素值范围,一般为[0,255]
  • bins:子区段数目,如果我们统计0~255每个像素值,bins=256;如果划分区间,比如0~15,16~31...240~255这样16个区间,bins=16

计算直方图

OpenCV和Numpy中提供了计算直方图的函数,我们对比一下他们的性能

OpenCV中直方图计算

在OpenCV中使用 cv2.calcHist(images,channels,mask,histSize,ranges) 计算,其中:

  • 参数1:要计算的原图,以方括号的传入,如:[img]
  • 参数2:类似前面提到的dims,灰度图写[0]就行,彩色图B、G、R分别传入[0]、[1]、[2]
  • 参数3:要计算的区域,计算整幅图的话,写None
  • 参数4:前面提到的bins
  • 参数5:前面提到的range
start = cv2.getTickCount()

img = cv2.imread(hist.jpg, 0)

hist = cv2.calcHist([img], [0], None, [256], [0, 256])

end = cv2.getTickCount()

print((end - start) / cv2.getTickFrequency())

Numpy中直方图计算

也可用Numpy的函数计算,使用 ravel() 函数 将二维矩阵展平变成一维数组,

hist, bins = np.histogram(img.ravel(), 256, [0, 256])

还有一种更高效的的方式:

hist = np.bincount(img.ravel(), minlength=256)

绘制直方图

其实Matplotlib自带了一个计算并绘制直方图的功能,不需要用到上面的函数

plt.hist(img.ravel(), 256, [0, 256])
plt.show()

 

OpenCV-Python : 直方图

原文:https://www.cnblogs.com/gezhuangzhuang/p/10716047.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!