对比度增强的python实现

1、灰度直方图

import cv2
import math
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
image=cv2.imread("/home/xiaomingming/profile/xmm.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()

还有一个是用hist函数来实现的

import cv2
import numpy as np
import matplotlib.pyplot as plt
image=cv2.imread("/home/xiaomingming/profile/xmm.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()

2、线性变换

import cv2
import numpy as np
import matplotlib.pyplot as plt
I=cv2.imread("/home/xiaomingming/profile/xmm.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()

3、直方图正则化:

import cv2
import numpy as np
import matplotlib.pyplot as plt
I=cv2.imread("/home/xiaomingming/profile/xmm.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()

4、伽马变换

import cv2
import numpy as np
import matplotlib.pyplot as plt
I=cv2.imread("/home/xiaomingming/profile/xmm.jpg",cv2.IMREAD_GRAYSCALE)
fI=I/255.0
r=0.5
O=np.power(fI,r)
cv2.imshow("I",I)
cv2.imshow("O",O)
cv2.waitKey(0)
cv2.destroyAllWindows()

5、全局直方图均衡化

import cv2
import math
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
def equalHist(image):
    rows,cols=image.shape
    grayHist=calcGrayHist(image)
    zeroCumuMoment=np.zeros([256],np.uint32)
    for p in range(256):
        if p==0:
            zeroCumuMoment[p]=grayHist[0]
        else:
            zeroCumuMoment[p]=zeroCumuMoment[p-1]+grayHist[p]
    outPut_q=np.zeros([256],np.uint8)
    cofficient=256.0/(rows*cols)
    for p in range(256):
        q=cofficient*float(zeroCumuMoment[p])-1
        if q>=0:
            outPut_q[p]=math.floor(q)
        else:
            outPut_q[p]=0
    equalHistImage=np.zeros(image.shape,np.uint8)
    for r in range(rows):
        for c in range(cols):
            equalHistImage[r][c]=outPut_q[image[r][c]]
    return equalHistImage
src=cv2.imread("/home/xiaomingming/profile/xmm.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow("src",src)
dst=equalHist(src)
cv2.imshow("dst",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值