opencv 白平衡

这个可以参考:

https://blog.csdn.net/weixin_43379058/article/details/88606961


OpenCV 图像白平衡算法(相机自动白平衡)

彩色相机内部有三个CCD电子耦合元件,分别用来感受红绿蓝三中颜色的光线,默认情况下,三个颜色的感光电路信号的放大比例是1:1:1的。在理想的拍摄环境下,纯白色的RGB分量按照1:1:1的比例放大之后,得到的是没有偏色的白色,当在非理想的环境光条件下,白色成像出来的效果会偏向环境光的颜色,而不是纯白色。

 

相机的自动白平衡就是要通过改变RGB感光电路信号的放大比例,让受环境光影响的白色还原成纯白色,保证在各种光线条件下,成像色彩跟物体真实的色彩保持一致

 

常用的一种自动白平衡算法是灰度世界法,它假设对于一副色彩丰富的图像,图像上RGB三个分量的平均值趋于同一个灰度值,一般取这个灰度值的大小为RGB三分量的平均值。

 

以下是OpenCV实现的灰度世界法:

python:

  1. import cv2 as cv

  2. # import numpy as np

  3.  
  4. # 读取图像

  5. img = cv.imread(r'F:\images\11.jpg')

  6. r, g, b = cv.split(img)

  7. r_avg = cv.mean(r)[0]

  8. g_avg = cv.mean(g)[0]

  9. b_avg = cv.mean(b)[0]

  10.  
  11. # 求各个通道所占增益

  12. k = (r_avg + g_avg + b_avg) / 3

  13. kr = k / r_avg

  14. kg = k / g_avg

  15. kb = k / b_avg

  16.  
  17. r = cv.addWeighted(src1=r, alpha=kr, src2=0, beta=0, gamma=0)

  18. g = cv.addWeighted(src1=g, alpha=kg, src2=0, beta=0, gamma=0)

  19. b = cv.addWeighted(src1=b, alpha=kb, src2=0, beta=0, gamma=0)

  20.  
  21. balance_img = cv.merge([b, g, r])

c++

  1. #include

  2. #include

  3.  
  4. using namespace cv;

  5.  
  6. int main()

  7. {

  8. Mat imageSource = imread("02.jpg");

  9. imshow("原始图像", imageSource);

  10. vector imageRGB;

  11.  
  12. //RGB三通道分离

  13. split(imageSource, imageRGB);

  14.  
  15. //求原始图像的RGB分量的均值

  16. double R, G, B;

  17. B = mean(imageRGB[0])[0];

  18. G = mean(imageRGB[1])[0];

  19. R = mean(imageRGB[2])[0];

  20.  
  21. //需要调整的RGB分量的增益

  22. double KR, KG, KB;

  23. KB = (R + G + B) / (3 * B);

  24. KG = (R + G + B) / (3 * G);

  25. KR = (R + G + B) / (3 * R);

  26.  
  27. //调整RGB三个通道各自的值

  28. imageRGB[0] = imageRGB[0] * KB;

  29. imageRGB[1] = imageRGB[1] * KG;

  30. imageRGB[2] = imageRGB[2] * KR;

  31.  
  32. //RGB三通道图像合并

  33. merge(imageRGB, imageSource);

  34. imshow("白平衡调整后", imageSource);

  35. waitKey();

  36. return 0;

  37. }

 

 

原始图像一,整体图像偏绿色:

 

白平衡校正后,天空的蓝色和树叶的绿色都得到了很好的还原:

 

原始图像二,整体偏黄色:

 

白平衡校正后效果:

你可能感兴趣的:(opencv)