对图片对比度和亮度的调整一般通过下面公式计算:
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()