数字像处理中的灰度直方图及其在OpenCV中的绘制方法

本文将介绍灰度直方图的基本概念、计算方法以及在OpenCV中如何进行绘制。灰度直方图(Gray Level Histogram)是指一个图片中各个亮度级别(或者叫做灰度级别)所占比例的统计信息。

数字图像处理是一门涉及到算法、数学和计算机科学等多个领域的学科,它广泛应用于人类生产生活的各个领域。在数字图像处理中,灰度直方图是一种非常重要的概念和工具,它可以帮助我们更好地理解和分析图片。

本文将介绍灰度直方图的基本概念、计算方法以及在OpenCV中如何进行绘制。如果您正在进行数字图像处理相关研究或者想要了解相关知识,那么这篇文章将对您有所帮助。

什么是灰度直方图?

灰度直方图(Gray Level Histogram)是指一个图片中各个亮度级别(或者叫做灰度级别)所占比例的统计信息。简单来说,就是将图片按照亮度级别划分为若干区间,并且统计每个区间内包含多少个像素点。

例如下面这张简单的黑白图片:

如果我们将这张图片按照亮度级别划分为0~255共256个区间,然后统计每个区间内包含多少个像素点,那么得到的结果就是下面这张灰度直方图:

从上面的灰度直方图可以看出,该图片中大部分像素点的亮度值都集中在了100左右,而亮度值较低和较高的像素点数量相对较少。

如何计算灰度直方图?

计算一张图片的灰度直方图需要经过以下几步:

1. 将图片转化为灰度图。因为彩色图片包含RGB三种颜色信息,在计算灰度直方图时会比较复杂。因此一般先将彩色图片转化为黑白或者单通道(如GRAY)格式。

在Python中使用OpenCV进行转换代码如下:

“`python

import cv2

img = cv2.imread(‘example.jpg’)

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

“`

其中,img为读取的彩色图片,gray_img为转化后的灰度图。

2. 将灰度图像素点按照亮度值划分到若干区间,并统计每个区间内包含多少个像素点。

在Python中可以使用numpy库中的histogram函数来实现:

import numpy as np

# 定义亮度级别区间

bins = np.arange(256)

# 计算各个区间内像素点数量

hist, _ = np.histogram(gray_img, bins=bins)

其中,bins定义了亮度级别的划分方式,在本例中共划分为0~255共256个区间。hist即为计算得到的各个区间内包含的像素点数量。

3. 绘制灰度直方图。绘制方法将在下一节详细介绍。

数字像处理中的灰度直方图及其在OpenCV中的绘制方法

如何在OpenCV中绘制灰度直方图?

在上一节我们已经介绍了如何计算一张图片的灰度直方图。接下来我们将介绍如何使用OpenCV进行直方图可视化。

首先需要导入matplotlib.pyplot和cv2两个库:

import matplotlib.pyplot as plt

然后定义一个名为plot_gray_hist()函数,用于输入一张彩色图片并输出对应的灰度直方图。

def plot_gray_hist(img):

# 将图片转化为灰度图

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 定义亮度级别区间

bins = np.arange(256)

# 计算各个区间内像素点数量

hist, _ = np.histogram(gray_img, bins=bins)

plt.figure()

# 绘制灰度直方图

plt.bar(bins[:-1], hist, width=1)

plt.xlim([-1, 256])

plt.show()

其中plt.bar()函数用于绘制柱状图,plt.xlim()函数用于设置x轴范围。

使用该函数可以很方便地对任意一张彩色图片进行灰度直方图可视化:

plot_gray_hist(img)

运行结果如下:

本文介绍了数字像处理中的灰度直方图及其在OpenCV中的绘制方法。通过本文的学习,您应该已经了解了什么是灰度直方图、如何计算灰度直方图以及在OpenCV中如何进行绘制。

灰度直方图是数字图像处理中非常重要的概念和工具,它可以帮助我们更好地理解和分析图片。如果您正在进行数字图像处理相关研究或者想要了解相关知识,那么本文应该对您有所帮助。

最后附上本文的GitHub代码链接: