邓梦琳 2018-11-25 03:07 采纳率: 0%
浏览 2004
已结题

python 【不调用函数】灰度直方图均衡化算法

在不调用某个算法库里面的函数的前提下,Python怎么实现灰度直方图均衡化算法?
同时应用该算法在图片上,显示对比与原图的差别

图片说明

  • 写回答

1条回答

  • @wojiubu@ 2018-11-30 01:57
    关注

    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt

    画直方图

    def zhifangtu(image):
    a = [0] * 256 # 创建储存像素数的一维数组
    w = image.shape[0] # 得到图像宽高
    h = image.shape[1]
    # 计算灰度像素数
    for i in range(w):
    for j in range(h):
    gray = image[i, j]
    a[gray] += 1
    # 以灰度为x轴像素数为y轴画直方图
    y = a
    x = [i for i in range(256)]
    plt.figure()
    plt.title("zhifangtu")
    plt.xlabel("Bins")
    plt.ylabel("Pixels")
    plt.plot(x, y)
    plt.xlim([0, 256])
    return a # 返回灰度像素数

    将图像均衡化

    def junhenghua(a, image): # 入口参数:灰度像素数和图片
    b = [0] * 256 # 储存个灰度像素占比数据
    c = [0] * 256 # 储存累计分布数据
    w = image.shape[0]
    h = image.shape[1]
    mn = w * h * 1.0
    img = np.zeros([w, h], np.uint8) # 创建空数组储存均衡化后数据

    # 计算灰度分布密度
    for i in range(len(a)):
        b[i] = a[i] / mn
    # 计算累计直方图数据
    for i in range(len(c)):
        if i == 1:
            c[i] = b[i]
        else:
            c[i] = c[i - 1] + b[i]
            a[i] = int(255 * c[i])
    # 对各灰度值进行均衡化映射
    for i in range(w):
        for j in range(h):
            img[i, j] = a[image[i, j]]
    
    return img  # 返回均衡化后图像
    

    image = cv.imread("C:/Users/zhengyingxin.NMSED/Desktop/1543115263_305536.jpg", 0) # 读取灰度图像
    cv.imshow("base", image)
    a = zhifangtu(image) # 画原始图像直方图并得到灰度像素数
    b = junhenghua(a, image) # 将图像均衡化
    cv.imshow('junhenghua', b)
    zhifangtu(b) # 画均衡化后图像直方图
    plt.show()
    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大