当前位置:   article > 正文

OpenCV-42 直方图均匀化

OpenCV-42 直方图均匀化

目录

一、直方图均匀化原理

二、直方图均匀化在OpenCV中的运用


一、直方图均匀化原理

直方图均匀化是通过拉伸像素强度的分布范围,使得在0~255灰阶上的分布更加均匀,提高图像的对比度。达到改善图像主管视觉效果的目的。对比度较低的图像适合使用直方图均衡化的方法来增强图像细节。

原理

  1. 计算累计直方图
  2. 将累计直方图进行区间转换
  3. 在累计直方图中,概率相近的原始值,会被处理为相同的值 

最初的像素点都在0-7之间,最后我们将其规划到0~255中间。 

二、直方图均匀化在OpenCV中的运用

使用API---eqyalizeHist(src[, dst)

示例代码如下:

  1. import cv2
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. cv2.namedWindow("img", cv2.WINDOW_NORMAL)
  5. cv2.resizeWindow("img", 1290, 480)
  6. lena = cv2.imread("beautiful women.png")
  7. gray = cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY)
  8. # lena变黑
  9. gray_dark = gray - 40
  10. # lena变亮
  11. gray_bright = gray + 40
  12. cv2.imshow("img", np.hstack((gray, gray_dark, gray_bright)))
  13. # 查看各自的直方图
  14. hist_gray = cv2.calcHist([gray], [0], None, [256], [0, 255])
  15. hist_dark = cv2.calcHist([gray_dark], [0], None, [256], [0, 255])
  16. hist_bright = cv2.calcHist([gray_bright], [0], None, [256], [0, 255])
  17. # 画出直方图
  18. plt.plot(hist_gray, label = "gray")
  19. plt.plot(hist_dark, label = "dark")
  20. plt.plot(hist_bright, label = "bright")
  21. plt.legend()
  22. plt.show()
  23. # 进行均衡化处理
  24. dark_equ = cv2.equalizeHist(gray_dark)
  25. bright_equ = cv2.equalizeHist(gray_bright)
  26. # 查看均衡化的直方图
  27. hist_dark_equ = cv2.calcHist([dark_equ], [0], None, [256], [0, 255])
  28. hist_bright_equ = cv2.calcHist([bright_equ], [0], None, [256], [0, 255])
  29. plt.plot(hist_dark_equ, label = "dark_equ")
  30. plt.plot(hist_bright_equ, label = "bright_equ")
  31. plt.legend()
  32. plt.show()
  33. cv2.imshow("gray_dark", np.hstack((gray_dark, dark_equ)))
  34. cv2.imshow("gray_dark", np.hstack((gray_bright, bright_equ)))
  35. cv2.waitKey(0)
  36. cv2.destroyAllWindows()

输出结果如下:

 图像均衡化之前:

图像均衡化之后:

 

直方图均衡化之前:

直方图均衡化之后:

 

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

闽ICP备14008679号