人工智能之视觉领域 计算机视觉 第十章 图像直方图

人工智能之视觉领域 计算机视觉

第十章 图像直方图


文章目录

  • [人工智能之视觉领域 计算机视觉](#人工智能之视觉领域 计算机视觉)
  • 前言:图像直方图
    • [1. 通俗理解:什么是图像直方图?](#1. 通俗理解:什么是图像直方图?)
      • [🌟 为什么重要?](#🌟 为什么重要?)
    • [2. 核心操作](#2. 核心操作)
      • [2.1 绘制直方图:`cv2.calcHist()`](#2.1 绘制直方图:cv2.calcHist())
      • [2.2 直方图均衡化:`cv2.equalizeHist()`](#2.2 直方图均衡化:cv2.equalizeHist())
    • [3. 应用场景](#3. 应用场景)
      • [🎯 场景1:图像增强](#🎯 场景1:图像增强)
      • [🎯 场景2:医学影像](#🎯 场景2:医学影像)
      • [🎯 场景3:视频监控](#🎯 场景3:视频监控)
    • [4. 完整工作流程(Mermaid 图)](#4. 完整工作流程(Mermaid 图))
    • [5. 配套代码实战](#5. 配套代码实战)
      • [示例 1:绘制灰度图像直方图](#示例 1:绘制灰度图像直方图)
      • [示例 2:直方图均衡化](#示例 2:直方图均衡化)
      • [示例 3:彩色图像的直方图均衡化](#示例 3:彩色图像的直方图均衡化)
    • [6. 高级技巧与注意事项](#6. 高级技巧与注意事项)
      • [⚠️ 注意事项 1:直方图均衡化的局限性](#⚠️ 注意事项 1:直方图均衡化的局限性)
      • [⚠️ 注意事项 2:自适应直方图均衡化(CLAHE)](#⚠️ 注意事项 2:自适应直方图均衡化(CLAHE))
      • [⚠️ 注意事项 3:多通道图像处理](#⚠️ 注意事项 3:多通道图像处理)
    • [7. 总结](#7. 总结)
  • 资料关注

前言:图像直方图

学习目标:掌握如何使用 OpenCV 绘制和分析图像的亮度分布,并通过直方图均衡化技术增强图像对比度,优化曝光不足或过曝的图像。


1. 通俗理解:什么是图像直方图?

想象你有一张照片:

  • 每个像素都有一个亮度值(0-255)
  • 直方图就是统计每个亮度值出现的次数!

直方图 = 图像亮度分布的"指纹"

  • 帮助我们了解图片的整体明暗程度
  • 是调整图像对比度、色彩的基础

🌟 为什么重要?

  • 曝光判断:是否太亮/太暗
  • 对比度评估:画面细节是否丰富
  • 图像增强:为后续处理提供依据

2. 核心操作

2.1 绘制直方图:cv2.calcHist()

python 复制代码
hist = cv2.calcHist(images, channels, mask, histSize, ranges)
参数 说明
images 输入图像(必须是列表形式 [img]
channels 通道索引(0=灰度,[0]=BGR中的蓝,[1]=绿,[2]=红)
mask 掩码图像(None=全图,其他=指定区域)
histSize 直方图尺寸(bin的数量,如 [256])
ranges 像素值范围(通常为 [0, 256])

2.2 直方图均衡化:cv2.equalizeHist()

仅适用于单通道灰度图像

python 复制代码
equ = cv2.equalizeHist(img)

💡 原理:重新分配亮度值,使整个图像的亮度更加均匀


3. 应用场景

🎯 场景1:图像增强

  • 对比度低的图像 → 提升视觉效果
  • 曝光不足或过曝 → 改善亮度分布

🎯 场景2:医学影像

  • X光片等医疗图像 → 提高病变区域的可见度

🎯 场景3:视频监控

  • 在低光照条件下 → 增强图像清晰度

4. 完整工作流程(Mermaid 图)

彩色
灰度
不满意
满意
原始图像
彩色 or 灰度?
转换为灰度
跳过
计算直方图
对比度满意?
直方图均衡化
显示直方图
显示结果图像


5. 配套代码实战

示例 1:绘制灰度图像直方图

python 复制代码
import cv2
import numpy as np
from matplotlib import pyplot as plt

def plot_histogram(image, title):
    # 计算直方图
    hist = cv2.calcHist([image], [0], None, [256], [0, 256])
    
    # 绘制直方图
    plt.figure()
    plt.title(title)
    plt.xlabel("Bins")
    plt.ylabel("# of Pixels")
    plt.plot(hist)
    plt.xlim([0, 256])

# 读取图像并转为灰度
img = cv2.imread('low_contrast.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 绘制原始图像直方图
plot_histogram(gray, "Original Image Histogram")

# 显示图像和直方图
cv2.imshow("Original Image", gray)
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

示例 2:直方图均衡化

python 复制代码
import cv2
import numpy as np
from matplotlib import pyplot as plt

def plot_histogram(image, title):
    hist = cv2.calcHist([image], [0], None, [256], [0, 256])
    plt.figure()
    plt.title(title)
    plt.xlabel("Bins")
    plt.ylabel("# of Pixels")
    plt.plot(hist)
    plt.xlim([0, 256])

# 读取图像并转为灰度
img = cv2.imread('low_contrast.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 执行直方图均衡化
equ = cv2.equalizeHist(gray)

# 绘制均衡化后的直方图
plot_histogram(equ, "Equalized Histogram")

# 显示原始与均衡化后的图像及其直方图
cv2.imshow("Original Image", gray)
cv2.imshow("Equalized Image", equ)
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

示例 3:彩色图像的直方图均衡化

对于彩色图像,需要分别对每个通道进行均衡化:

python 复制代码
import cv2
import numpy as np
from matplotlib import pyplot as plt

# 读取图像
img = cv2.imread('color_image.jpg')

# 分离颜色通道
b, g, r = cv2.split(img)

# 分别对每个通道执行直方图均衡化
b_equ = cv2.equalizeHist(b)
g_equ = cv2.equalizeHist(g)
r_equ = cv2.equalizeHist(r)

# 合并均衡化后的通道
equ_img = cv2.merge((b_equ, g_equ, r_equ))

# 显示原始图像和均衡化后的图像
cv2.imshow("Original Image", img)
cv2.imshow("Equalized Image", equ_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 可选:绘制每个通道的直方图
for i, (channel, color) in enumerate(zip([b, g, r], ['blue', 'green', 'red'])):
    hist = cv2.calcHist([channel], [0], None, [256], [0, 256])
    plt.plot(hist, color=color)
    plt.xlim([0, 256])

plt.show()

6. 高级技巧与注意事项

⚠️ 注意事项 1:直方图均衡化的局限性

  • 对于已经具有良好对比度的图像,均衡化可能不会带来显著改善
  • 过度均衡化可能导致图像失真(如噪声放大)

⚠️ 注意事项 2:自适应直方图均衡化(CLAHE)

  • 解决全局均衡化带来的问题
  • 使用 cv2.createCLAHE() 创建 CLAHE 对象,然后调用 .apply() 方法
python 复制代码
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
cl1 = clahe.apply(gray)

⚠️ 注意事项 3:多通道图像处理

  • 不同颜色通道应独立处理
  • 或者将图像转为 Lab 色彩空间,只对 L(亮度)通道进行均衡化

7. 总结

步骤 关键操作 函数
预处理 彩色→灰度 cvtColor(..., cv2.COLOR_BGR2GRAY)
绘制直方图 计算亮度分布 cv2.calcHist(...)
均衡化 提升对比度 cv2.equalizeHist(...)cv2.createCLAHE().apply(...)
展示结果 显示直方图和图像 Matplotlib.pyplot

🌟 你现在可以

  • 绘制任何图像的亮度分布直方图
  • 使用直方图均衡化提升图像对比度
  • 对比度不足或过度曝光的图像进行修复
    下一章,我们将深入探讨边缘检测------识别图像中物体边界的强大工具!

资料关注

咚咚王

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
乾元4 小时前
算力优化: 在有限硬件资源下进行安全模型微调(Fine-tuning)
网络·人工智能·神经网络·安全·web安全·机器学习·安全架构
数字供应链安全产品选型4 小时前
2026,问境AIST发布:悬镜安全定义AI原生安全治理新范式
人工智能·安全·ai-native
云汉芯城ICkey4 小时前
云汉芯城✖海智在线亮相AWE 2026:AI驱动的供应链体系加速创新产品落地
人工智能
泛联新安4 小时前
AI For Trusted Code|泛联新安:以“AI+可信”构筑智能时代基石
人工智能
zyplayer-doc4 小时前
2026企业知识库选型:zyplayer-doc功能深度评测与使用总结
人工智能·开源软件
Breath574 小时前
我用开源项目把 AI Agent 和钉钉打通了,现在能查人、发消息、管文档
人工智能·开源·钉钉
TLeung653674 小时前
【无标题】
人工智能·ai
ViiTor_AI4 小时前
ElevenLabs 语音克隆工具深度评测:价格、功能与最佳替代方案
人工智能·语音识别
Nile4 小时前
解密openclaw底层pi-mono架构系列一:5. 让 AI 住进 Slack —— 自我管理的 Slack Bot 智能体详解
人工智能·架构
DARLING Zero two♡4 小时前
私人 AI 随身带!OpenClaw+cpolar 外网访问完整教程
人工智能