先上个图
灰度直方图反应不同灰度级在像素的个数。图像如果是RGB三层图像的话 通过某种算法转化为灰度值 本次转化的范围为[0-256]。
bins “堆”这里指灰度级
pixels “像素点”
代码
import cv2 import matplotlib.pyplot as plt def show_image(image, title, pos): image_RGB image[:, :, ::-1] plt.title(title) plt.subplot(2, 3, pos) plt.imshow(image_RGB) def show_histogram(hist, title, pos, color): plt.title(title) plt.subplot(2, 2, pos) plt.xlabel( Bins ) # 横轴信息 plt.ylabel( Pixels ) # 纵轴信息 plt.xlim([0, 256]) # 范围 plt.plot(hist, color color) # 绘制直方图 def main(): # 5 创建画布 plt.figure(figsize (15, 6)) # 画布大小 plt.suptitle( Gray Image Histogram , fontsize 14, fontweight bold ) # 设置标题形式 img cv2.imread( 4.jpg ) img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) hist_img cv2.calcHist([img_gray], [0], None, [256], [0, 256]) img_BGR cv2.cvtColor(img_gray, cv2.COLOR_GRAY2BGR) show_image(img_BGR, BGR image , 1) show_histogram(hist_img, gray image histogram , 2, m ) plt.show() if __name__ __main__ : main()
附 官方matplotlib.pyplot文档
cv2.calcHist(images, channels, mask, histSize, ranges[hist[, accumulate]])
原图注意用list表示 例如 [img_gray]
通道注意[0]灰度 ;[0][1][2][3]rgb
mask范围none表示全图
histSize( bins ) 灰度级别取值有8 16 32 64 128 256 例如[ 256]
range表示强度范围 例如[0, 256]
图片得到了作者的许可 愿祖国强大



