A图比较暗,B图比较亮,现在将A图增亮到和B图一样
需要求出A和B两张图亮度倍数关系,一种方法是遍历所有像素点相加再求倍数,另一种是直接使用数组求平均的方法,方法1适合C++等场合思想,在python中一切皆对象,操作更快,速度比遍历像素点快了好多倍
import cv2
import numpy as np
def enhance_img(input,label):
#input:需要进行强度匹配的图像
#label:用于图像校准的图像
input_sum= 0
label_sum= 0
input_h,input_w = input.shape
img_out = np.zeros((input_h,input_w),dtype=input.dtype)
for h in range(input_h):
for w in range(input_w):
input_sum += input[h,w]
label_sum += label[h,w]
factor = label_sum/input_sum
for h in range(input_h):
for w in range(input_w):
img_out[h,w] = np.clip(input[h,w]*factor,0,255)
return img_out
def enhance_img1(input,label):
return np.clip(input*(label[:,:].mean()/input[:,:].mean()),0,255)
img = cv2.imread("./input/1.1/2x2Deg/0.png",-1)
label = cv2.imread("./label/1.0/2x2Deg/0.png",-1)
img_1 = enhance_img(img,label)
img_2 = enhance_img1(img,label)
print(img_1.all()==img_2.all())# True
cv2.waitKey(0)