首页 > 编程语言 >直方图均衡化-python实现

直方图均衡化-python实现

时间:2022-10-27 13:03:10浏览次数:53  
标签:probability img python 均衡化 param 直方图 prob


直方图均衡化-python实现_读取图像

直方图均衡化-python实现_直方图均衡化_02

直方图均衡化-python实现_读取图像_03

直方图均衡化-python实现_直方图均衡化_04

"""
@author: LiShiHang
@software: PyCharm
@file: 5.1.直方图均衡化.py
@time: 2018/12/24 16:02
@desc:
"""
import cv2 # 仅用于读取图像矩阵
import matplotlib.pyplot as plt
import numpy as np

gray_level = 256 # 灰度级


def pixel_probability(img):
"""
计算像素值出现概率
:param img:
:return:
"""
assert isinstance(img, np.ndarray)

prob = np.zeros(shape=(256))

for rv in img:
for cv in rv:
prob[cv] += 1

r, c = img.shape
prob = prob / (r * c)

return prob


def probability_to_histogram(img, prob):
"""
根据像素概率将原始图像直方图均衡化
:param img:
:param prob:
:return: 直方图均衡化后的图像
"""
prob = np.cumsum(prob) # 累计概率

img_map = [int(i * prob[i]) for i in range(256)] # 像素值映射

# 像素值替换
assert isinstance(img, np.ndarray)
r, c = img.shape
for ri in range(r):
for ci in range(c):
img[ri, ci] = img_map[img[ri, ci]]

return img


def plot(y, name):
"""
画直方图,len(y)==gray_level
:param y: 概率值
:param name:
:return:
"""
plt.figure(num=name)
plt.bar([i for i in range(gray_level)], y, width=1)


if __name__ == '__main__':

img = cv2.imread("source.jpg", 0) # 读取灰度图

prob = pixel_probability(img)
plot(prob, "原图直方图")

# 直方图均衡化
img = probability_to_histogram(img, prob)
cv2.imwrite("source_hist.jpg", img) # 保存图像

prob = pixel_probability(img)
plot(prob, "直方图均衡化结果")

plt.show()


标签:probability,img,python,均衡化,param,直方图,prob
From: https://blog.51cto.com/u_15847885/5800829

相关文章

  • python遇到 Segmentation fault (core dumped) 错误
    问题描述在linux服务器上运行代码遇到这个错误。解决方案重置了python的env环境。由于python包互相依赖,单独升级某个包未能解决问题,遂决定重新create虚拟环境。命令如下:cond......
  • python if中的false(哪些视为False)
    标题不太合适,即表示if判断为假的情况,具体如下。在Python中所有的对象都可以进行真值测试,下面罗列一下判断为假的情况:NoneFalse数值中的零,包括0,0.0,0j(虚数)空序列,包括空字符串......
  • python决策树(二叉树、树)的可视化
    问题描述在我学习​​机器学习实战-决策树​​部分,欲可视化决策树结构。最终可视化结果:解决方案决策树由嵌套字典组成,如:{“nosurfacing”:{0:“no”,1:{“flippers”:......
  • opencv-contrib-python的安装:Set OPENCV_ENABLE_NONFREE CMake option and rebuild th
    问题描述前往本页,可查看opencv-python和opencv-contrib-python的区别。​​https://docs.opencv.org/master/​​比如,SIFT就需要用到opencv-contrib-python包中的cv2.xfeat......
  • python实验报告(面向对象程序设计)
    实验报告实例01:通过类属性统计类的实例个数  结果:实例02:根据身高、体重计算BMI指数(共享版)  结果:   实例03:在模拟电影点播功能时应用属性  结果:......
  • PYTHON 中sort 与 sorted
    sort:改变原来的列表sorted:生成新列表,原列表不变参数:reverse 正序还是倒序list_name要排列的对象key排列方式函数1.通过len()函数排序l......
  • 用 C++ 实现 Python 中的 range
    在C++中实现Python的range目录在C++中实现Python的range在实现过程中几个应该注意的问题整型溢出迭代器选择终止条件类型选择vector转换最终代码和Python对比代码在最后,......
  • Python修改步数并同步到微信
    1.前言目前有很多可以刷步数的网站,都有在更新维护且免费,有需求或者仅在乎功能的可以看看,如下:1.https://www.17bushu.com/2.https://yd.shuabu.net/3.https://www......
  • python for-break-else 语句
    有两种情况可能会导致for循环结束。第一个是for循环中满足条件遇到break,第二种情况是循环自然结束。现在我们可能想知道其中的哪一个是循环完成的原因,一种方法是设置一个......
  • 安装 Python 模块
    作为一个流行的开源开发项目,Python拥有一个活跃的贡献者和用户支持社区,这些社区也可以让他们的软件可供其他Python开发人员在开源许可条款下使用。这允许Python用户......