由于学习的需要,利用python和opencv实现简单的灰度图直方图绘制及其均衡化 。
代码如下
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)):