前言
对于灰度图像而言,灰度直方图可以统计灰度图像内各个灰度级出现的次数。
灰度直方图的横坐标是灰度图像中各像素点的灰度级。灰度的数值范围为[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数组的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) # 显示图像
结束语
如果本博文对你有所帮助,可以点个赞/收藏支持一下,如果能够持续关注,小编感激不尽~
小编会坚持创作,持续优化博文质量,以小见大,给读者带来更好de阅读体验~