创客出手

目录

使用OpenCV和Python输出图像的直方图 np.histogram

np.histogram## 实现目的

通过 np.histogram 计算图像的直方图,可以通过直方图的方法查看图片的一些信息,例如是否过曝或者欠曝。

file

实现代码

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)

file

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()

file

程序说明

本示例首先使用了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)。

np.histogram 的详细使用请参考:
https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.histogram.html

通过计算得到的直方图数组,在使用 pit.fill() 函数进行填充绘制,最后显示出来。

pit.fill() 的具体请参考:
https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.fill.html

OpenCV有自己的计算直方图的通用函数 cv2.calcHist 。但是,在本示例中,我们将使用NumPy的 np.histogram,它使代码更加简洁。例程的参数是输入图像矩阵、bin的数量和bin的范围。它返回一个数组,其中包含bin的直方图值和边缘值。

更多关于 的文章
关注创客出手公众号

关注创客出手