直方图简单来说就是图像中每个像素值的个数统计,比如一副灰度图中像素值为0的有多少个,1的有多少个...
在计算直方图之前,先了解几个术语:
OpenCV和Numpy中提供了计算直方图的函数,我们对比一下他们的性能
OpenCV中直方图计算
在OpenCV中使用 cv2.calcHist(images,channels,mask,histSize,ranges) 计算,其中:
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()
原文:https://www.cnblogs.com/gezhuangzhuang/p/10716047.html