【OpenCV-Python】20.OpenCV的直方图均衡化

20.OpenCV的直方图均衡化


文章目录

  • 前言
  • 一、普通直方图均衡化
  • 二、限制对比度自适应直方图均衡化
  • 三、OpenCV-Python资源下载
  • 总结


前言

  直方图均衡化通过调整图像的灰度来提高图像的对比度。


一、普通直方图均衡化

  普通直方图均衡化主要是指将原图像的灰度级均匀地映射到全部灰度级范围内。OenCV的 cv2.equalizeHist()函数用于实现普通直方图均衡化,其基本格式如下:

dst = cv2.equalizeHist(src)

dst为直方图均衡化后的图像
src为原图像, 必须是8位的单通道图像
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('bee.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('original', img)

hist = cv2.calcHist([img], [0], None, [256], [0, 255])
plt.figure(figsize = (10,5))

plt.title('Original_Hist')
plt.plot(hist, color='b')

img2 = cv2.equalizeHist(img)
cv2.imshow('EqualizeHist', img2)

hist = cv2.calcHist([img2], [0], None, [256], [0, 255])
plt.figure(figsize = (10,5))
plt.title('EqualizeHist_Hist')
plt.plot(hist, color='k')

cv2.waitKey(0)
cv2.destroyAllWindows()

【OpenCV-Python】20.OpenCV的直方图均衡化_第1张图片


二、限制对比度自适应直方图均衡化

  普通直方图均衡化用于对图像全局进行调整,不能有效提高图像的局部对比度。为了提高图像的局部对比度,可将图像分为若干字块,对子块进行直方图均衡化,这就是自适应直方图均衡化。自适应直方图均衡化可能会造成图像的局部对比度过高,从而导致失真。为了解决此问题,可对局部对比度进行限制,这就是限制对比度自适应直方图均衡化(Contrast Limited Adaptied Histogram Equalization, CLAHE)。
  OpenCV的cv2.createCLAHE()函数用于创建CLAHE对象,其基本格式如下:

retval =cv2.createCLAHE([clipLimit[, tileGridSize]])

retval为返回的CLAHE对象
clipLimit为对比度受限制的阈, 默认值为40.0
tileGridSize为直方图均衡化的网格大小, 默认值为(8,8)

  调用CLAHE对象的apply()方法,将其应用到图像中进行均衡化

img = cv2.imread('clahe.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('original', img)

hist = cv2.calcHist([img], [0], None, [256], [0, 255])
plt.figure(figsize = (10,5))
plt.title('Original_Hist')
plt.plot(hist, color='b')

img2 = cv2.equalizeHist(img)
cv2.imshow('EqualizeHist', img2)

hist = cv2.calcHist([img2], [0], None, [256], [0, 255])
plt.figure(figsize = (10,5))
plt.title('EqualizeHist_Hist')
plt.plot(hist, color='b')

clahe = cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8, 8))
img3 = clahe.apply(img)
cv2.imshow('CreateCLAHE', img3)

hist = cv2.calcHist([img3], [0], None, [256], [0, 255])
plt.figure(figsize = (10,5))
plt.title('CreateCLAHE_Hist')
plt.plot(hist, color='b')

cv2.waitKey(0)
cv2.destroyAllWindows()

【OpenCV-Python】20.OpenCV的直方图均衡化_第2张图片


三、OpenCV-Python资源下载

OpenCV-Python测试用图片、中文官方文档、opencv-4.5.4源码


总结

  以上内容介绍了OpenCV-Python的直方图基础操作,有关Python、数据科学、人工智能等文章后续会不定期发布,请大家多多关注,一键三连哟(●’◡’●)。

你可能感兴趣的:(OpenCV-Python,opencv,python,计算机视觉)