前言

对于灰度图像而言,灰度直方图可以统计灰度图像内各个灰度级出现的次数。
灰度直方图的横坐标是灰度图像中各像素点的灰度级。灰度的数值范围为[0, 255]。因此,如果将图像分为256个灰度级,那么每个灰度级唯一对应一个灰度;如果将图像分为16个灰度级,那么每个灰度级包含连续的16个灰度(如[0, 15], [15, 31]…)。
灰度直方图的纵坐标是具有该灰度级的像素个数。

需求说明

欲对灰度图像格式的lena图像实现灰度直方图的绘制。

解决方案

基于numpy数组的revel方法实现灰度直方图的绘制

代码如下:

import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread("lena.jpg", 0) # 以灰度图像格式读取图像
cv2.imshow("lena", img)

# 基于numpy数组的ravel方法将二维数组img展开成一维数组
flattene_img = img.ravel()

# 对一维数组进行直方图绘制
plt.hist(flattene_img, bins=16) # bins=16表示包含16个灰度级
plt.show()

cv2.waitKey(0) # 显示图像

结果如下:
numpy知识库:基于numpy绘制灰度直方图-LMLPHP
numpy知识库:基于numpy绘制灰度直方图-LMLPHP

基于numpy数组的reshape方法实现灰度直方图的绘制

代码如下:

import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread("lena.jpg", 0) # 以灰度图像格式读取图像
cv2.imshow("lena", img)

# 基于numpy数组的reshape方法将二维数组img展开成一维数组
flattene_img = img.reshape((-1,)) # 将reshape的shape参数设置为(-1,),代码可以自动计算img展成一维数组后的实际大小 
# ---> 比如img形状为(16, 16) ---> 参数(-1,) 等价于参数(256, )

# 对一维数组进行直方图绘制
plt.hist(flattene_img, bins=16) # bins=256表示包含256个灰度级
plt.show()

cv2.waitKey(0) # 显示图像

numpy知识库:基于numpy绘制灰度直方图-LMLPHP
numpy知识库:基于numpy绘制灰度直方图-LMLPHP

结束语

如果本博文对你有所帮助,可以点个赞/收藏支持一下,如果能够持续关注,小编感激不尽~
小编会坚持创作,持续优化博文质量,以小见大,给读者带来更好de阅读体验~

12-03 22:28