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)
01-01
04-25
277
04-11