前言
直方图是图像处理中用来统计像素值分布的常用工具。通过直方图,我们可以快速了解图像的亮度、对比度、颜色分布等信息,从而为后续处理(如直方图均衡化、阈值分割等)提供依据。
功能实现
本示例实现了以下功能:
- 显示图像:加载一张彩色图像并显示。
- 计算彩色直方图:统计 RGB 三个通道的像素值分布。
- 可视化直方图:使用 Matplotlib 绘制直方图。
完整代码
import cv2 as cv
import matplotlib.pyplot as plt
def image_hist():
# 加载彩色图像
image = cv.imread('images/test.png')
if image is None:
print("无法加载图像")
return
# 显示图像
cv.imshow("image", image)
# 定义颜色通道
color = ('blue', 'green', 'red')
# 计算并绘制每个通道的直方图
for i, col in enumerate(color):
hist = cv.calcHist([image], [i], None, [256], [0, 256])
print(f"{col} 通道直方图数据:\n", hist.T) # 转置为行向量便于阅读
plt.plot(hist, color=col, label=f'{col.capitalize()} Channel')
plt.xlim([0, 256])
# 显示直方图
plt.title("Color Histogram")
plt.xlabel("Pixel Value")
plt.ylabel("Frequency")
plt.legend()
plt.grid()
plt.show()
# 等待用户按键关闭窗口
cv.waitKey(0)
cv.destroyAllWindows()
# 调用函数
image_hist()
定义颜色通道
color = ('blue', 'green', 'red')
- 定义通道颜色,用于对应 BGR 三个通道的像素值分布。
3. 计算直方图
hist = cv.calcHist([image], [i], None, [256], [0, 256])
image
:输入图像。[i]
:通道索引,0
表示蓝色通道,1
表示绿色通道,2
表示红色通道。None
:不使用掩码。[256]
:将像素值分为 256 个区间。[0, 256]
:像素值范围为 0 到 255。
4. 绘制直方图
plt.plot(hist, color=col, label=f'{col.capitalize()} Channel')
plt.xlim([0, 256])
- 使用 Matplotlib 的
plt.plot
函数绘制直方图。 - 设置 x 轴范围为
[0, 256]
。
5. 添加图例与网格
plt.legend()
plt.grid()
- 添加图例便于区分不同通道的直方图。
- 显示网格方便观察直方图数据分布。
应用场景
- 图像分析:
- 通过直方图快速了解图像的亮度、对比度及颜色分布。
- 图像增强:
- 结合直方图均衡化技术,提升图像的对比度。
- 特征提取:
- 将直方图作为图像特征,用于分类或检索。
输出效果
© 版权声明
转载请注明出处,并标明原文链接。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
THE END
暂无评论内容