By 凌顺
2019年9月17日
实现目的
通过 np.histogram 计算图像的直方图,可以通过直方图的方法查看图片的一些信息,例如是否过曝或者欠曝。
实现代码
1,加载需要的库
import cv2
import numpy as np
import matplotlib.pyplot as plt
2,显示可爱的狗狗
# 加载图片
img = cv2.imread('dog.png')
# 把图片的BGR色彩空间转换成RGB色彩空间
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 显示图片
plt.imshow(img)
3,使用 np.histogram 计算直方图
# 使用 np.histogram 函数计算直方图
hist, bins = np.histogram(img, 256, [0, 255])
4 显示直方图
# 使用 plt.fill 函数 填充多边形
plt.fill(hist)
# 标记x轴的名称
plt.xlabel('pixel value')
# 显示直方图
plt.show()
程序说明
本示例首先使用了NumPy的histogram函数,计算图片的直方图数组
大概语法与参数如下:
histogram(a,bins=10,range=None,weights=None,density=False)
a 输入的数组;
(可选)bins 指定统计的区间个数;
(可选)range 是一个长度为2的元组,表示统计范围的最小值和最大值,默认值None,表示范围由数据的范围决定
(可选)weights 为数组的每个元素指定了权值,histogram()会对区间中数组所对应的权值进行求和
(可选)density 为True时,返回每个区间的概率密度;为False,返回每个区间中元素的个数
该函数返回两个数值,分别是:
hist : 直方图数组
bin_edges:返回bin边(长度(hist)+1)。
通过计算得到的直方图数组,在使用 pit.fill() 函数进行填充绘制,最后显示出来。
OpenCV有自己的计算直方图的通用函数 cv2.calcHist 。但是,在本示例中,我们将使用NumPy的 np.histogram,它使代码更加简洁。例程的参数是输入图像矩阵、bin的数量和bin的范围。它返回一个数组,其中包含bin的直方图值和边缘值。