Python版本是Python3.7.3,OpenCV版本OpenCV3.4.1,开发环境为PyCharm
文章目录
13.2 使用Numpy绘制直方图
模块matplotlib.pyplot提供了一个类似于MATLAB绘图方式的框架,可以使用其中的matplotlib.pyplot.hist()函数(以下简称为hist()函数)来绘制直方图。
此函数的作用是根据数据源和灰度级分组绘制直方图。其基本语法格式为:
matplotlib.pyplot.hist(X, BINS)
其中两个参数的含义如下:
● X:数据源,必须是一维的。图像通常是二维的,需要使用ravel()函数将图像处理为一维数据源以后,再作为参数使用。
● BINS:BINS的具体值,表示灰度级的分组情况。
函数ravel()的作用是将二维数组降维成一维数组。例如,有图像a,其值为:
使用函数ravel()对a进行处理:
b = a.ravel()
可以得到b为:
eg1:使用hist()函数绘制一幅图像的直方图。
根据题目的要求,编写代码如下:
import cv2
import matplotlib.pyplot as plt
o=cv2.imread("image\\boat.jpg")
cv2.imshow("original",o)
plt.hist(o.ravel(),256)
plt.show( ) # 显示图像
cv2.waitKey()
cv2.destroyAllWindows()
运行上述程序后,得到如下图所示的结果。其中左图是原始图像,右图是其对应的直方图。
eg2:使用函数hist()将一幅图像的灰度级划分为16组后,绘制该图像的直方图。
将灰度级划分为16组,即将灰度级划分为16个子集,对应的BINS值为16。按照题目的要求,编写代码如下:
import cv2
import matplotlib.pyplot as plt
o=cv2.imread("image\\boat.bmp")
plt.hist(o.ravel(),16)
plt.show( ) # 显示图像
运行上述程序,结果如下图所示,从图中可以看到,整个灰度级被划分为16个子集。