灰度直方图
#灰度直方图
import sys,cv2
import numpy as np
import matplotlib.pyplot as plt
def calcGrayHist(image):
rows,cols = image.shape
grayHist = np.zeros([256],np.uint64)
for r in range(rows):
for c in range(cols):
grayHist[image[r][c]] +=1#把图像灰度值作为索引
return(grayHist)
#绘图
if __name__ =='__main__':
image = cv2.imread('E:\\sy2\\4\\img2.jpg',cv2.IMREAD_GRAYSCALE)
grayHist = calcGrayHist(image)
x_range = range(256)
plt.plot(x_range,grayHist,'r',linewidth = 2,c='black')
#设置坐标轴范围
y_maxValue = np.max(grayHist)
plt.axis([0,255,0,y_maxValue])
#设置坐标轴标签
plt.xlabel('gray Level')
plt.ylabel('number of pixels')
plt.show()
'''
#Matplotlib提供了计算直方图的函数hist
import sys,cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ =='__main__':
image = cv2.imread('E:\\sy2\\4\\img2.jpg',cv2.IMREAD_GRAYSCALE)
rows,cols = image.shape
pixelSequence = image.reshape([rows*cols,])
numberBins = 256
histogram,bins,patch=plt.hist(pixelSequence,numberBins,facecolor='black',
histtype='bar')
plt.xlabel(u'gray Level')
plt.ylabel(u'number of pixels')
y_maxValue = np.max(histogram)
plt.axis([0,255,0,y_maxValue])
plt.show()在这里插入代码片
详细参考链接
线性变换
import cv2,sys
import numpy as np
if __name__ =='__main__':
I = cv2.imread('E:\\sy2\\4\\img1.jpg',cv2.IMREAD_GRAYSCALE)
a = 2
O = float(a)*I
O[O>255] = 255#溢值问题
O = np.round(O)#四舍五入
O = O.astype(np.uint8)
cv2.imshow('I',I)
cv2.imshow('O',O)
cv2.waitKey(0)
cv2.destroyAllWindows()
直方图正规化
参考链接
#直方图正规化
import cv2,sys
import numpy as np
if __name__ =='__main__':
I = cv2.imread('E:\\sy2\\4\\img1.jpg',cv2.IMREAD_GRAYSCALE)
Imax = np.max(I)
Imin = np.min(I)
Omin,Omax = 0,255
a = float(Omax-Omin)/(Imax-Imin)
b = Omin - a*Imin
O = a*I + b
O = O.astype(np.uint8)
cv2.imshow('I',I)
cv2.imshow('O',O)
cv2.waitKey(0)
cv2.destroyAllWindows()
'''
#opencv提供函数
import cv2,sys
import numpy as np
if __name__ =='__main__':
src = cv2.imread('E:\\sy2\\4\\img1.jpg',cv2.IMREAD_GRAYSCALE)
dst = cv2.normalize(src,None,0,255,cv2.NORM_MINMAX)
print(dst.dtype)
dst = dst.astype(np.uint8)
cv2.imshow('src',src)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
伽马变换
#伽马变换
import cv2,sys
import numpy as np
if __name__ =='__main__':
I = cv2.imread('E:\\sy2\\4\\img1.jpg',cv2.IMREAD_GRAYSCALE)
fI = I/255.0#必须归一化(0,1)
gamma = 2
O = np.power(fI,gamma)
cv2.imshow('I',I)
cv2.imshow('O',O)
cv2.waitKey(0)
cv2.destroyAllWindows()