OpenCV白平衡算法之灰度世界法(消除RGB受光照影响)

摘要:
当使用OpenCV处理图像时,颜色定位是一种常见的方法。然而,RGB受到光线的严重影响,无法转换为HSVXYZ和其他空间,可以使用白平衡算法进行校正,使其变黄、变蓝和变红的照片更像自然光下的图像。

在用OpenCV对图像进行处理时,利用颜色定位是常常会接触到的方法,但RGB受光照影响比较严重,转换到HSV XYZ等空间也解决不了时,

可以用白平衡算法进行修正,使其发黄、发蓝、发红的照片更加趋于自然光下的图像。(转摘请说明来源)

程序代码示例如下:

1 //该代码实现白平衡算法中的灰度世界法,能有效改善图像发红发蓝发绿的现象;
2 
3 #include <opencv2/opencv.hpp>
4 using namespacecv;
5 
6 intmain()
7 {
8 Mat g_srcImage,dstImage;
9     vector<Mat>g_vChannels;
10     g_srcImage = imread("C:/Users/Administrator/Desktop/区分高架定位/01.jpg");
11     imshow("原图",g_srcImage);
12     //waitKey(0);
13 
14     //分离通道
15 split(g_srcImage,g_vChannels);
16     Mat imageBlueChannel = g_vChannels.at(0);
17     Mat imageGreenChannel = g_vChannels.at(1);
18     Mat imageRedChannel = g_vChannels.at(2);
19 
20     double imageBlueChannelAvg=0;
21     double imageGreenChannelAvg=0;
22     double imageRedChannelAvg=0;
23 
24     //求各通道的平均值
25     imageBlueChannelAvg = mean(imageBlueChannel)[0];
26     imageGreenChannelAvg = mean(imageGreenChannel)[0];
27     imageRedChannelAvg = mean(imageRedChannel)[0];
28 
29     //求出个通道所占增益
30     double K = (imageRedChannelAvg+imageGreenChannelAvg+imageRedChannelAvg)/3;
31     double Kb = K/imageBlueChannelAvg;
32     double Kg = K/imageGreenChannelAvg;
33     double Kr = K/imageRedChannelAvg;
34 
35     //更新白平衡后的各通道BGR值
36     addWeighted(imageBlueChannel,Kb,0,0,0,imageBlueChannel);
37     addWeighted(imageGreenChannel,Kg,0,0,0,imageGreenChannel);
38     addWeighted(imageRedChannel,Kr,0,0,0,imageRedChannel);
39 
40     merge(g_vChannels,dstImage);//图像各通道合并
41     imshow("白平衡后图",dstImage);
42     waitKey(0);
43     return 0;
44 }

结果如下:

OpenCV白平衡算法之灰度世界法(消除RGB受光照影响)第1张OpenCV白平衡算法之灰度世界法(消除RGB受光照影响)第2张

免责声明:文章转载自《OpenCV白平衡算法之灰度世界法(消除RGB受光照影响)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【华为云技术分享】云小课 | 迁移第三方云厂商数据至OBS,两种方式任你选二进制运算-十进制与二进制的转换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

OpenCV学习(13) 细化算法(1)

程序编码参考经典的细化或者骨架算法文章: T. Y. Zhang and C. Y. Suen, “A fast parallel algorithm for thinning digital patterns,” Comm. ACM, vol. 27, no. 3, pp. 236-239, 1984. 它的原理也很简单:       我们对一副二值图像...

干货|自适应大邻域搜索(ALNS)算法求解带时间窗的车辆路径规划问题(附java代码)

转眼距离开学又过去一个多月了,不知道大家在家里学习的怎么样?这段时间小编在家里也没闲着,时隔多日,再次为大家带来干货内容。 邻域搜索类启发式算法有很多种,比如禁忌搜索啦,模拟退火啦,变邻域搜索啦等等。这次带来的自适应大邻域搜索代码,相对上述几种会更复杂,编写相对全面。 小编在编写代码时,主要采用git-hub上一位作者de.markusziller的代码,...

算法概念、大O记号

算法定义:基于特定的计算类型,旨在解决某一信息处理问题而设计的一个指令序列算法需具备以下要素 输入与输出输入(input):对所求解问题特定实例的描述 输出(output):经计算和处理之后得到的信息,即针对输入问题实例的答案 确定性和可行性:算法应可描述为由若干语义明确的基本操作组成的指令序列,且每一基本操作在对应的计算模型中均可兑现。 有穷性...

计算智能(CI)之粒子群优化算法(PSO)(一)

欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识! 计算智能(Computational Intelligence , CI)是以生物进化的观点认识和模拟智能。按照这一观点,智能是在生物的遗传、变异、生长以及外部环境的自然选择中产生的。在用进废退、优胜劣汰的过程中,适应度高的...

matlab中imread 从图形文件读取图像

来源:https://ww2.mathworks.cn/help/matlab/ref/imread.html?searchHighlight=imread&s_tid=doc_srchtitle imread 从图形文件读取图像 全页折叠 语法 A = imread(filename) A = imread(filename,fmt) A...

MAC下Xcode配置opencv(2017.3.29最新实践,亲测可行)(转)

本文原创,未经同意,谢绝转载!(转载请告知本人并且经过本人同意--By Pacific-hong) 本人小硕一枚,因为专业方向图像相关,所以用到opencv,然后网上MAC下Xcode配置opencv的教程比较少,要不然就是过时了。所以在一番倒腾之后,成功配置了OpenCV。写下本文供他人参考,少走弯路。 一.版本介绍 首先介绍macOS,Xcode,Op...