当前位置:   article > 正文

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

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

20.OpenCV的直方图均衡化



前言

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


一、普通直方图均衡化

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

dst = cv2.equalizeHist(src)

dst为直方图均衡化后的图像
src为原图像, 必须是8位的单通道图像
  • 1
  • 2
  • 3
  • 4
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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述


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

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

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

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

  调用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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

在这里插入图片描述


三、OpenCV-Python资源下载

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


总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/116213?site
推荐阅读
相关标签
  

闽ICP备14008679号