绘制灰度图像和彩色图像的直方图

  • 图像直方图:图像直方图(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()

 效果展示:

猜你喜欢

转载自blog.csdn.net/qq_58664081/article/details/129090729