Opencv 学习笔记:直方图均衡化(灰度 / 彩色图像二值化优化)

直方图均衡化是提升图像对比度的核心技巧,可让暗部细节更清晰。本文分别演示灰度图像和彩色图像的直方图均衡化实现,新手可快速掌握不同图像类型的处理逻辑。

核心代码实现

python 复制代码
import cv2 as cv
import numpy as np

# 1. 读取图像并校验
src = cv.imread(".\image\1.bmp")
if src is None:
    print('could not load image')
    exit()

# 2. 灰度图像直方图均衡化
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
dst_gray = cv.equalizeHist(gray)  # 直接对灰度图均衡化
cv.imshow('dst_gray(灰度均衡化)', dst_gray)

# 3. 彩色图像直方图均衡化(分通道处理)
# 拆分BGR三个通道
b, g, r = cv.split(src)
# 分别对每个通道做均衡化
bh = cv.equalizeHist(b)
gh = cv.equalizeHist(g)
rh = cv.equalizeHist(r)
# 合并处理后的通道
result_color = cv.merge((bh, gh, rh))
cv.imshow('result_color(彩色均衡化)', result_color)

cv.waitKeyEx(0)
cv.destroyAllWindows()

关键知识点解析

1. 核心逻辑拆解

图像类型 处理流程 核心 API 作用说明
灰度图像 直接均衡化 cv.equalizeHist(gray) 单通道直接处理,提升整体对比度
彩色图像 拆分通道→分别均衡化→合并通道 cv.split()+cv.equalizeHist()+cv.merge() 避免直接均衡化导致颜色失真

2. 重要注意事项

  • 彩色图处理禁忌:不能直接将彩色图转灰度后均衡化再转回彩色,会丢失颜色信息;
  • 通道顺序:OpenCV 中彩色图默认是 BGR 顺序,拆分 / 合并时需保持顺序一致;
  • 适用场景:适合暗部细节缺失的图像(如逆光照片、低对比度文档),过度均衡化可能导致噪点放大。

3. 扩展优化技巧

  • 自适应均衡化 :对光照不均图像,改用cv.createCLAHE(),避免局部过曝:

    python 复制代码
    clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
    dst_clahe = clahe.apply(gray)  # 灰度图自适应均衡化
  • 效果对比 :可将原图、灰度均衡化图、彩色均衡化图拼接显示,直观对比:

    python 复制代码
    compare = cv.hconcat([src, result_color])  # 横向拼接
    cv.imshow('对比图', compare)

总结

  1. 灰度图像直方图均衡化可直接调用cv.equalizeHist,一步提升对比度;
  2. 彩色图像需拆分 BGR 通道分别均衡化后再合并,避免颜色失真;
  3. 光照不均场景优先使用自适应均衡化(CLAHE),效果更自然。
相关推荐
智者知已应修善业7 小时前
【proteus中lm339电压滞回比较器达到三角波转换成方波】2023-4-13
驱动开发·经验分享·笔记·硬件架构·proteus·硬件工程
551只玄猫7 小时前
新编大学德语1第三版笔记 第5课Essen und Trinken
笔记·学习笔记·德语·外语·德语a1·自学德语·新编大学德语
sayang_shao8 小时前
ARM架构运行模式学习笔记
arm开发·学习·架构
不只会拍照的程序猿9 小时前
《嵌入式AI筑基笔记02:Python数据类型01,从C的“硬核”到Python的“包容”》
人工智能·笔记·python
happymaker06269 小时前
web前端学习日记——DAY04
前端·学习
solicitous11 小时前
遇到一个口头机遇
学习·生活
观书喜夜长12 小时前
大模型应用开发学习-基于 LangChain 框架实现的交互式问答脚本
python·学习
中屹指纹浏览器13 小时前
2026指纹浏览器性能瓶颈分析与优化技巧
经验分享·笔记
FPGA小迷弟13 小时前
FPGA 时序约束基础:从时钟定义到输入输出延迟的完整设置
前端·学习·fpga开发·verilog·fpga
梦醒过后说珍重13 小时前
医学图像超分辨率:如何构建“教科书级”的模型评测与交互式可视化流水线?
opencv