- 图像直方图:图像直方图(Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。
- 图像直方图的意义:
- 直方图是图像中像素强度分布的图形表达方式
- 它统计了每一个强度值所具有的像素个数
- CV领域常借助图像直方图来实现图像的二值化
直方图绘制
- 目的:直方图是对图像像素的统计分布,它统计了每个像素(0-255)的数量
- 函数:cv2.calcHist(images,channels,mask,histSize,ranges)
- 参数说明:
- 参数1:待统计图像,需用中括号括起来
- 参数2:待计算的通道
- 参数3:Mask,这里没有使用,所以用None
- 参数4:histSize,表示直方图分成多少份
- 参数5:是表示直方图中各个像素的值,[0.0,256.0]表示直方图能表示像素值从0.0到256的像素。直方图是对图像像素的统计分布,它统计了每个像素(0到255)的数量。
代码展示
'''
@author: 绯雨千叶
calcHist—计算图像直方图
函数原型:calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate=None)
images:图像矩阵,例如:[image]
channels:通道数,例如:0
mask:掩膜,一般为:None
histSize:直方图大小,一般等于灰度级数
ranges:横轴范围
'''
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread("../img/lrn.jpg")
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 获取灰度图像
# 灰度图像的直方图,方法一
plt.figure() # 新建一个图像
plt.subplot(221)
plt.hist(img1.ravel(), 256)
# 灰度图像的直方图, 方法二
plt.subplot(222)
hist = cv2.calcHist([img1], [0], None, [256], [0, 256])
plt.plot(hist)
# 彩色图像直方图
plt.subplot(223)
chans = cv2.split(img) # 将3通道BGR彩色图像分离为B、G、R 单通道图像
colors = ("b", "g", "r")
for (chan, color) in zip(chans, colors):
hist = cv2.calcHist([chan], [0], None, [256], [0, 256]) # 分别是图像、通道数、mask、份数、灰度值范围
plt.plot(hist, color=color)
plt.xlim([0, 256])
plt.show()
效果展示: