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

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

第十章 图像直方图


文章目录

  • [人工智能之视觉领域 计算机视觉](#人工智能之视觉领域 计算机视觉)
  • 前言:图像直方图
    • [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》

相关推荐
lijianhua_97128 小时前
国内某顶级大学内部用的ai自动生成论文的提示词
人工智能
EDPJ8 小时前
当图像与文本 “各说各话” —— CLIP 中的模态鸿沟与对象偏向
深度学习·计算机视觉
蔡俊锋8 小时前
用AI实现乐高式大型可插拔系统的技术方案
人工智能·ai工程·ai原子能力·ai乐高工程
自然语8 小时前
人工智能之数字生命 认知架构白皮书 第7章
人工智能·架构
大熊背8 小时前
利用ISP离线模式进行分块LSC校正的方法
人工智能·算法·机器学习
eastyuxiao9 小时前
如何在不同的机器上运行多个OpenClaw实例?
人工智能·git·架构·github·php
诸葛务农9 小时前
AGI 主要技术路径及核心技术:归一融合及未来之路5
大数据·人工智能
光影少年9 小时前
AI Agent智能体开发
人工智能·aigc·ai编程
charlee449 小时前
最小二乘问题详解17:SFM仿真数据生成
c++·计算机视觉·sfm·数字摄影测量·无人机航测
ai生成式引擎优化技术9 小时前
TSPR-WEB-LLM-HIC (TWLH四元结构)AI生成式引擎(GEO)技术白皮书
人工智能