OpenCV 图像白平衡算法(相机自动白平衡)
2016-12-09 22:50
495 查看
彩色相机内部有三个CCD电子耦合元件,分别用来感受红绿蓝三中颜色的光线,默认情况下,三个颜色的感光电路信号的放大比例是1:1:1的。在理想的拍摄环境下,纯白色的RGB分量按照1:1:1的比例放大之后,得到的是没有偏色的白色,当在非理想的环境光条件下,白色成像出来的效果会偏向环境光的颜色,而不是纯白色。
相机的自动白平衡就是要通过改变RGB感光电路信号的放大比例,让受环境光影响的白色还原成纯白色,保证在各种光线条件下,成像色彩跟物体真实的色彩保持一致。
常用的一种自动白平衡算法是灰度世界法,它假设对于一副色彩丰富的图像,图像上RGB三个分量的平均值趋于同一个灰度值,一般取这个灰度值的大小为RGB三分量的平均值。
以下是OpenCV实现的灰度世界法:
原始图像一,整体图像偏绿色:
![](http://img.blog.csdn.net/20161209224502134)
白平衡校正后,天空的蓝色和树叶的绿色都得到了很好的还原:
![](http://img.blog.csdn.net/20161209224510505)
原始图像二,整体偏黄色:
![](http://img.blog.csdn.net/20161209224514287)
白平衡校正后效果:
相机的自动白平衡就是要通过改变RGB感光电路信号的放大比例,让受环境光影响的白色还原成纯白色,保证在各种光线条件下,成像色彩跟物体真实的色彩保持一致。
常用的一种自动白平衡算法是灰度世界法,它假设对于一副色彩丰富的图像,图像上RGB三个分量的平均值趋于同一个灰度值,一般取这个灰度值的大小为RGB三分量的平均值。
以下是OpenCV实现的灰度世界法:
#include <highgui/highgui.hpp> #include <imgproc/imgproc.hpp> using namespace cv; int main() { Mat imageSource = imread("02.jpg"); imshow("原始图像", imageSource); vector<Mat> imageRGB; //RGB三通道分离 split(imageSource, imageRGB); //求原始图像的RGB分量的均值 double R, G, B; B = mean(imageRGB[0])[0]; G = mean(imageRGB[1])[0]; R = mean(imageRGB[2])[0]; //需要调整的RGB分量的增益 double KR, KG, KB; KB = (R + G + B) / (3 * B); KG = (R + G + B) / (3 * G); KR = (R + G + B) / (3 * R); //调整RGB三个通道各自的值 imageRGB[0] = imageRGB[0] * KB; imageRGB[1] = imageRGB[1] * KG; imageRGB[2] = imageRGB[2] * KR; //RGB三通道图像合并 merge(imageRGB, imageSource); imshow("白平衡调整后", imageSource); waitKey(); return 0; }
原始图像一,整体图像偏绿色:
白平衡校正后,天空的蓝色和树叶的绿色都得到了很好的还原:
原始图像二,整体偏黄色:
白平衡校正后效果:
相关文章推荐
- 【VS开发】【图像处理】基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果
- 基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果
- 【VS开发】【图像处理】自动白平衡(AWB)算法---色温曲线
- OpenCV 图像清晰度评价(相机自动对焦)
- 基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果
- OpenCV 图像清晰度评价(相机自动对焦)
- 基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果
- 基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果
- 基于白点检测的数码相机自动白平衡算法实现(Opencv+vs)
- 【VS开发】【图像处理】相机中白平衡的算法模拟实现
- 【图像算法OpenCV】几何不变矩--Hu矩
- Opencv 图像增强算法 图像检测结果
- OpenCV 2 学习笔记(8): 利用邻域处理图像与简单的算术图像处理算法:图像滤波与加权和
- OpenCV中图像旋转(warpAffine)算法的实现过程
- OpenCV中图像旋转(warpAffine)算法的实现过程
- PS 图像调整算法——自动色阶 (Auto Levels)
- [OpenCV2]执行简单的图像算法
- 【OpenCV-图像处理】用sift特征点算法和ransac算法进行多幅图像的拼接
- OpenCV中图像旋转(warpAffine)算法的实现过程
- OpenCV直方图图像增强算法