Python实现直方图均衡

def Read_raw(filename,w,h):
    #初始化image
    image=[]
    for i in range(3*h):
        image.append([])
        for j in range(w):
            image[i].append(255)
    #读取raw
    with open(filename,'rb') as f:
        data=f.read()
    #写入raw
    for i in range(3*h):
        for j in range(w):
            image[i][j]=data[i*w+j]
    print('读取文件{0}成功'.format(filename))
    return image

def Write_raw(filename,image):
    #将数组image转为bytes
    bt=bytearray()
    for i in range(len(image)):
        for j in range(len(image[i])):
            bt.append(image[i][j])
    #写入raw
    with open(filename,'wb') as f:
        f.write(bt)
    f.close()
    print('写入文件{0}成功'.format(filename))

def banlance(image):
    #频数统计
    histogram=[]
    for i in range(256):
        histogram.append(0)
    for i in range(len(image)):
        for j in range(len(image[i])):
            histogram[image[i][j]]+=1
    print('频数统计完成')
    #确定对应关系
    x=round(sum(histogram)/256)
    fun=[]
    for i in range(256):
        fun.append([])
    w=0
    for i in range(256):
        while sum(histogram[:w])<(i+1)*x:
            fun[i].append(w)
            w=w+1
            if w==len(histogram):
                break
    print('对应关系确定完成')
    #根据fun更新image
    ban=[]
    for i in range(len(image)):
        ban.append([])
        for j in range(len(image[i])):
            ban[i].append(0)
    for i in range(len(ban)):
        for j in range(len(ban[i])):
            for h in range(len(fun)):
                if image[i][j] in fun[h]:
                    ban[i][j]=h
                    break
    print('ban计算完成')
    return ban

image=Read_raw('test.raw',1000,1000)
ban=banlance(image)
Write_raw('ban_1.raw',ban)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值