图像灰度把白色与黑色之间按对数关系分为256级,0到255对应图像从黑到灰再到白的变化过程。
图像灰度特征用来描述图像亮度,只有强度信息,而与图像的颜色无关。现在常用的灰度特征提取方法是提取图像的灰度直方图,图像的灰度直方图是关于图像灰度级分布的函数,是表示图像中每一灰度级与该灰度级出现的频数(图像上该灰度像素的数目)间的统计关系。图像灰度直方图能对图像进行大致的描述,虽然不能直接描述出图像轮廓,但是能表现出图像的明亮程度和对比度。
要将彩色图像转换为灰度图像,并提取绘制其灰度直方图,需要用到Python中的一些图像处理库,如,OpenCV和Matplotlib。以下是实现过程的代码:
1.导入所需要的库
import cv2
import numpy as np
import matplotlib.pyplot as plt
2.读取彩色图像并转换为灰度图像:
image = cv2.imread('your_image_path.jpg') # 你实际的图像文件路径
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
3.绘制灰度直方图:
histogram = cv2.calcHist([gray_image], [0], None, [256], [0, 256])
plt.figure(figsize=(8, 6))
plt.plot(histogram, color='black')
plt.title("Gray Image Histogram")
plt.xlabel("Pixel Value")
plt.ylabel("Frequency")
plt.show()
上述代码使用OpenCV的“calcHist”函数计算灰度图像的直方图,并使用Matplotlib绘制直方图图像。
确保安装了OpenCV和Matplotlib库:
pip install opencv-python
pip install matplotlib
运行上述代码后,将看到灰度图像和其对应的灰度直方图。直方图显示了不同灰度级别的像素在图像中的分布情况。
以下是我自己的例子:
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取彩色图像并转换为灰度图像
image = cv2.imread('../dataset/5_Flower/train/daisy/5547758_eea9edfd54_n.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 绘制灰度直方图
histogram = cv2.calcHist([gray_image], [0], None, [256], [0, 256])
plt.figure(figsize=(8, 6))
plt.plot(histogram, color='black')
plt.title("Gray Image Histogram")
plt.xlabel("Pixel Value")
plt.ylabel("Frequency")
plt.show()
灰度直方图的横纵坐标解释:
横轴:表示灰度级别(0 到 255)
纵轴:表示对应灰度级别的像素数量。
换句话说,横轴显示了图像中的不同灰度值,纵轴显示了每个灰度值在图像中出现的频率或数量。
解释这个灰度直方图:
-
横轴(X轴): 这是图像的灰度级别。在灰度图像中,每个像素的灰度值可以从 0 到 255,表示黑到白之间的不同亮度。横轴上的每个刻度代表一个灰度级别。
-
纵轴(Y轴): 这是对应灰度级别的像素数量或出现的频率。纵轴上的每个点表示图像中具有特定灰度值的像素的数量。纵轴的值越大,表示图像中具有该灰度级别的像素越多。
通过绘制灰度直方图,可以得到以下信息:
-
亮度分布: 可以看到图像中各种不同亮度的像素的分布情况。图像的亮度范围分布越广泛,直方图越宽。
-
对比度信息: 直方图的高度可以反映图像中不同灰度级别之间的对比度。高峰表示在这个灰度级别附近有更多的像素。
-
亮度均衡: 直方图可以帮助您判断图像是否过于暗或过于亮,从而进行亮度调整,使图像更好地展现细节。
总之,灰度直方图是一种用于可视化图像亮度分布和对比度的工具,能够更好地了解图像的灰度特性。