海康工业相机白平衡比选择器对应的值被重置后,如何恢复原成像
做项目的时候,有时候手抖,一不小心把一个成熟稳定的项目的相机配置,重置了,如何进行恢复呢,在不知道之前配置数据的情况下。
我在做项目的时候,为了让这个相机成像稳定一点,尤其是做颜色检测时,如果自动白平衡打开,会因为环境问题,光线波动,导致这个成像颜色波动,尤其是做颜色检测的时候,所以一般我都会把这个白平衡关掉,然后单独对红绿蓝三个通道去设置相应的值,调好了成像后,后面识别的时候,识别颜色的阈值就和当前的成像保持着关联,一但成像变化大了,就可能导致之前的颜色阈值不适配了,导致颜色识别错误。
今天没事的时候就会对着这个工业相机软件乱点乱看,就不小心把之前配置的参数重置了。成像发生变化后,如果不想改变算法,就要尽量配置参数让其更接近原先的成像。
首先:要需要两张图,一张图简称1图,第二张图简称2图
1图是原先的图,在参数未被重置时候,之前保存下的图
2图是重置参数后的图
此外如果画面目标变化了,我们要截取到一个不变区域,通过这个区域的颜色对比来计算。
其次:要知道重置后,当前图的白平衡对应的红绿蓝三个值
准备就绪后,上代码:
import cv2
import numpy as np
# 根据已有两张图1和2,还有2图对应的白平衡值,来求1图的白平衡值def calculate_white_balance(image1_path, image2_path, reference_wb):# 读取两张图像img1 = cv2.imread(image1_path)img2 = cv2.imread(image2_path)if img1 is None:raise Exception(f"无法读取图像: {image1_path}")if img2 is None:raise Exception(f"无法读取图像: {image2_path}")# 将图像转换为浮点数类型img1_float = img1.astype(np.float32)img2_float = img2.astype(np.float32)# 计算两张图像每个通道的平均值avg1_b = np.mean(img1_float[:, :, 0])avg1_g = np.mean(img1_float[:, :, 1])avg1_r = np.mean(img1_float[:, :, 2])avg2_b = np.mean(img2_float[:, :, 0])avg2_g = np.mean(img2_float[:, :, 1])avg2_r = np.mean(img2_float[:, :, 2])# 使用参考白平衡值ref_r, ref_g, ref_b = reference_wb# 计算两张图像之间的比例关系ratio_r = avg1_r / avg2_rratio_g = avg1_g / avg2_gratio_b = avg1_b / avg2_b# 计算1.jpg的白平衡值wb_r = int(ref_r * ratio_r)wb_g = int(ref_g * ratio_g)wb_b = int(ref_b * ratio_b)return wb_r, wb_g, wb_bdef main():# 参考图像的白平衡值reference_wb = (1360, 1124, 2110) # (R, G, B)try:# 计算1.jpg的白平衡值wb_r, wb_g, wb_b = calculate_white_balance("1.png", "2.png", reference_wb)print(f"1.jpg的白平衡值:")print(f"R: {wb_r}")print(f"G: {wb_g}")print(f"B: {wb_b}")except Exception as e:print(f"错误: {str(e)}")if __name__ == "__main__":main()
输出结果:
1.jpg的白平衡值:
R: 1552
G: 1268
B: 2045
把这个值配置到白平衡对应的红绿蓝值即可,图像又恢复成1图的成像了。