图像对比度与亮度调整算法实现(Python&OpenCV)

来源:互联网 发布:蜂窝移动数据无法清零 编辑:程序博客网 时间:2024/04/27 16:38

转自:http://blog.csdn.net/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.2b=100for 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]=0cv2.imshow('dst',dst)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

color=img[i,j][c]*a+b

通过这条语句可以得到处理后的像素值,但是为了防止像素值越界(0~255),所以进行了容错处理保证数值在0~255之间。(a,b数值可以适当修改观察结果变化)

if color>255:    dst[i,j][c]=255elif color<0:    dst[i,j][c]=0
  • 1
  • 2
  • 3
  • 4

实例演示

处理前后图片对比如下 
这里写图片描述 
完整的代码如下

import  cv2img=cv2.imread('hw.jpg')cv2.imshow('img',img)rows,cols,channels=img.shapedst=img.copy()a=1.2b=100for 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]=0cv2.imshow('dst',dst)cv2.waitKey(0)cv2.destroyAllWindows()


原创粉丝点击