场景

来源需要对一张图片,弱化背景效果的需求。与其说弱化不如说是把暗度调亮。

解决

图片对比度和亮度的调整一般通过下面公式计算: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 参数一般称为偏置,用来调节亮度

方案一代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import  cv2

img=cv2.imread('test.jpg')
cv2.imshow('original_img',img)
rows,cols,channels=img.shape
dst=img.copy()

a=0.5
b=80
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: # 防止像素值越界(0~255)
dst[i,j][c]=255
elif color<0: # 防止像素值越界(0~255)
dst[i,j][c]=0

cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

方案二:

1
2
3
4
5
6
7
8
9
10
11
12
13
def contrast_img(img1, c, b):  # 亮度就是每个像素所有通道都加上b
rows, cols, channels = img1.shape

# 新建全零(黑色)图片数组:np.zeros(img1.shape, dtype=uint8)
blank = np.zeros([rows, cols, channels], img1.dtype)
dst = cv2.addWeighted(img1, c, blank, 1-c, b)
cv2.imshow('original_img', img)
cv2.imshow("contrast_img", dst)

img = cv2.imread("./test.png", cv2.IMREAD_COLOR)
contrast_img(img, 1.3, 3)
cv2.waitKey(0)
cv2.destroyAllWindows()

参考文献