上一次我们介绍了通过python将图像进行灰度化,这一次我们来介绍如何通过python进行图像直方图的绘制,这一次我们要借助于python中的matplotlib库。
预备知识
何为直方图
图像直方图是对图像像素分布情况的图形表示,比如我们可以统计像素为0的点有多少个,像素为1的点有多少个…然后将统计情况用图形表示出来即为直方图,当然我们也可以根据需要统计区间内的分布情况,比如像素在0到100内的像素点的个数等等。
matplotlib
matplotlib库是python第三方库,可以完成绘制各种图形以及数据可视化的任务。在绘制直方图时,我们使用pyplot
子模块中的hist
函数。下面我们先简要介绍该函数的使用,这样在下面就可以直接使用了。
plt.hist(a,num_bins)
a
:数据列表num_bins
:要分成的组数
简而言之,对于图片而言,第一个参数就是所有像素点的取值情况,第二个参数就是我们打算把这些像素值分为几组,这个函数也可用于一般的直方图绘制,注意第一个参数应该为numpy数组类型。
开始绘制
一般而言我们都是对于灰度图进行直方图的绘制,因此我们先要进行灰度化操作,还需要注意的是不能直接将一张图片读取后直接作为hist
函数的第一个参数,要先将其转化为一个一维的数组。
下面我们来看代码。
首先导入需要的库:
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
随后读入图片并进行灰度化操作,这里方便起见我们直接调用opencv自带的函数。
path_1 = 'work2data/guazi.bmp'
img_1 = cv.imread(path_1)
img_1_gray = cv.cvtColor(img_1, cv.COLOR_RGB2GRAY)
接下来我们定义直方图绘制的函数
def histogram(img):
img = img.reshape(-1) #将图像展开成一个一维的numpy数组
plt.hist(img, 128) #将数据分为128组
plt.show()
我们通过语句调用这个函数就可以完成直方图绘制,效果如下图所示。
图像直方图的绘制还可以通过numpy和opencv中的函数来完成,可以看这篇blog:OpenCV-Python教程15:直方图
本次分享就到这里,感谢阅读!