转自:http://blog.youkuaiyun.com/haofan_/article/details/76752353
算法
对图片对比度和亮度的调整一般通过下面公式计算:
g(x,y) = a*f(x,y)+b
f(x,y)代表源图像x行,y列的像素点的c通道的数值 g(x,y)代表目 标图像x行,y列的像素点的c通道的数值 a参数(a>0)表示放大的倍数(一般在0.0~3.0之间) b参数一般称为偏置,用来调节亮度
代码实现
Python&OpenCV代码实现上述算法
a=1.2
b=100
for i in range (rows):
for j in range (cols):
for c in range (3 ):
color=img[i,j][c]*a+b
if color>255 :
dst[i,j][c]=255
elif color<0 :
dst[i,j][c]=0
cv2.imshow('dst ',dst)
color=img[i,j][c]*a+b
通过这条语句可以得到处理后的像素值,但是为了防止像素值越界(0~255),所以进行了容错处理保证数值在0~255之间。(a,b数值可以适当修改观察结果变化)
if color >255 :
dst[i,j][c]=255
elif color <0 :
dst[i,j][c]=0
实例演示
处理前后图片对比如下 完整的代码如下
import cv2
img=cv2.imread('hw .jpg')
cv2.imshow('img ',img)
rows,cols,channels=img.shape
dst=img.copy()
a=1.2
b=100
for i in range (rows):
for j in range (cols):
for c in range (3 ):
color=img[i,j][c]*a+b
if color>255 :
dst[i,j][c]=255
elif color<0 :
dst[i,j][c]=0
cv2.imshow('dst ',dst)
cv2.waitKey(0 )
cv2.destroyAllWindows()