实现白平衡算法中的灰度世界法,能有效改善图像发红/发蓝/发绿的现象

1、OpenCV

#include <opencv2/opencv.hpp>
using namespace cv;int main()
{Mat g_srcImage,dstImage;vector<Mat> g_vChannels;g_srcImage = imread("C:/Users/Administrator/Desktop/01.jpg");imshow("原图",g_srcImage);//waitKey(0);//分离通道split(g_srcImage, g_vChannels);Mat imageBlueChannel = g_vChannels.at(0);Mat imageGreenChannel = g_vChannels.at(1);     Mat imageRedChannel = g_vChannels.at(2);double imageBlueChannelAvg = 0;double imageGreenChannelAvg = 0;double imageRedChannelAvg = 0;//求各通道的平均值imageBlueChannelAvg = mean(imageBlueChannel)[0];imageGreenChannelAvg = mean(imageGreenChannel)[0];imageRedChannelAvg = mean(imageRedChannel)[0];//求出个通道所占增益double K = (imageRedChannelAvg+imageGreenChannelAvg+imageRedChannelAvg) / 3;double Kb = K / imageBlueChannelAvg;double Kg = K / imageGreenChannelAvg;double Kr = K / imageRedChannelAvg;//更新白平衡后的各通道BGR值addWeighted(imageBlueChannel,Kb,0,0,0,imageBlueChannel);addWeighted(imageGreenChannel,Kg,0,0,0,imageGreenChannel);addWeighted(imageRedChannel,Kr,0,0,0,imageRedChannel);merge(g_vChannels,dstImage);//图像各通道合并imshow("白平衡后图",dstImage);waitKey(0);return 0;
}

API详解:

void cvAddWeighted( const CvArr* src1, double alpha,const CvArr* src2, double beta,double gamma, CvArr* dst );
参数1:src1,图1
参数2:alpha,图1数组元素权重

参数3:src2,图2
参数4:beta,图2数组元素权重
参数5:gamma,图1与图2叠加之后再添加的数值。不要太大,不然图片一片白。总和等于255以上就是纯白色了。

参数6:dst,输出图片
即:目标图=src1*alpha+src2*beta+gamma

2、Halcon

dev_close_window ()
read_image (Image, 'D:/hellowprld/2/test777.jpg')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
*将图像进行通道分解,分别转换为三个通道的RGB图像
decompose3 (Image, Red, Green, Blue)
*实现白平衡算法中的灰度世界法,能有效改善图像发红/发蓝/发绿的现象
*取RGB各个通道的平均值
get_domain (Red, Domain)
intensity (Domain, Red, MeanRed, DeviationRed)
get_domain (Green, Domain)
intensity (Domain, Green, MeanGreen, DeviationGreen)
get_domain (Blue, Domain)
intensity (Domain, Blue, MeanBlue, DeviationBlue)
*求出个通道所占增益
K := (MeanRed + MeanGreen + MeanBlue) / 3.0
Kr := K / MeanRed
Kg := K / MeanGreen
Kb := K / MeanBlue
*更新白平衡后的各通道值White Balance
scale_image (Red, ImageScaledRed, Kr, 0)
scale_image (Green, ImageScaledGreen, Kg, 0)
scale_image (Blue, ImageScaledBlue, Kb, 0)
compose3(ImageScaledRed, ImageScaledGreen, ImageScaledBlue, Multichannel0)
write_image (Multichannel0, 'jpeg 100', 0, 'D:/opt.jpg')
stop()

---------------附录--------------------

两幅图像之间处理的算子

1.sub_image(ImageMinuendImageSubtrahend : ImageSub : MultAdd : )

对两幅图像做减法   g' := (g1 - g2) * Mult + Add

程序如下:

read_image (Scene00, 'autobahn/scene_00')

read_image (Scene01, 'autobahn/scene_01')

sub_image (Scene00, Scene01, ImageSub1, 1, 0)

dev_display(ImageSub1)

2.abs_image(Image : ImageAbs : : )

计算图像的绝对值模型

3.crop_part(Image : ImagePart : RowColumnWidthHeight : )

剪切出一个长方形的图像

4.add_image(Image1Image2 : ImageResult : MultAdd : )

两图像相叠加 g' := (g1 + g2) * Mult + Add

5.max_image(Image1Image2 : ImageMax : : )

计算两幅图像每个像素点的最大值

6.min_image(Image1Image2 : ImageMin : : )

计算两幅图像每个像素点的最小值

7.div_image(Image1Image2 : ImageResult : MultAdd : )

两幅图像相除   g' := g1 / g2 * Mult + Add

8.mult_image(Image1Image2 : ImageResult : MultAdd : )

两幅图像相乘   g' := g1 * g2 * Mult + Add

OpenCV和Halcon分别实现彩色图像的白平衡效果相关推荐

  1. opencv和halcon标定参数结果对比

    在Stake Overflow里面有人讨论过这个问题,当我们用Opencv和halcon一起编程序的时候,需要考虑两者参数的不同,现在碰到的问题就是,我在已经知道内参矩阵的前提之下,想要求出外参矩阵, ...

  2. opencv [c++] OpenCV实现Halcon相关算子算法

    目录 1.Dyn_threshold 动态阈值 2.OpenCV实现 2.Emphasize图像锐化增强处理 3.select_shape()特征筛选 4.opencv访问遍历图像的每一个像素方法 5 ...

  3. OpenCV、Halcon博客与资源收藏整理备用

    原文链接:https://libaineu2004.blog.csdn.net/article/details/88778170 原文作者:libaineu2004 OpenCV官网 https:// ...

  4. opencv和HALCON坐标系的不同

    opencv的坐标原点在左上角,往右为X轴正方向,往下为Y轴正方向(用Image Watch可以很容易看出来) HALCON的坐标原点在左上角,往右为Y轴正方向,往下为X轴正方向(HALCON窗口左下 ...

  5. 数字图像基础,论坛,算法库matlab,opencv,halcon

    ......................................................... 顺便复习一下直角坐标系和极坐标系 http://zh.wikipedia.org/w ...

  6. opencv python 实现灰度图像和彩色图像直方图全局均衡化和自适应均衡化

    首先进行简单的灰度图像的全局均衡化和自适应均衡化 import cv2 as cv import numpy as npimg = cv.imread('cun.jpg',0)# 全局直方图均衡化 i ...

  7. 使用OpenCV实现Halcon算法(4)OpenCV实现边缘模板匹配算法

    声明:本篇仅仅是分享网上的开源项目,算法非本人原创. 本文转自:OpenCV研习社 干货 | OpenCV实现边缘模板匹配算法 - 云+社区 - 腾讯云 干货 | OpenCV实现边缘模板匹配算法 - ...

  8. 使用OpenCV实现Halcon算法(7)选择轮廓,select_shape

    一.先看他人的文章 转载的网址是: https://www.cnblogs.com/jsxyhelu/p/4650151.html halcon源码: read_image (Image1, 'F:/ ...

  9. 使用OpenCV实现Halcon算法(1)亚像素提取边缘,Sub-Pixel Edge Detector

    声明:本篇仅仅是分享网上的开源项目,算法非本人原创.转载文章: <A Sub-Pixel Edge Detector: an Implementation of the Canny/Devern ...

最新文章

  1. Angry IP Scanner 获取设备的IP
  2. 脑电信号预处理--去趋势化(Detrended fluctuation analysis)
  3. Linux,OS X mark工具(目录跳转工具)
  4. 关于Element学习笔记
  5. 前端学习(3142):react-hello-react之父组件render
  6. 查看目录中的内容及权限
  7. Adjacent Bit Counts(01组合数)
  8. 最简单的排序算法(C和C++实现)
  9. c 语言重载参数类型不同重载和,C/C++函数重载与缺省参数
  10. Ruby学习笔记1 -- 基本语法和数据类型, Class
  11. eplan加密狗已损坏_[转载]EPLAN Electric P8 仿真加密狗 error 1068 问题
  12. 利用Hilbert变换进行相位调制信号的解调
  13. 静觅爬虫学习笔记8-爬取猫眼电影
  14. LoRa学习<二>:Rx Duty Cycle模式实验
  15. 信奥中的数学 数论篇 相关资料汇总(2022.07.07)
  16. Google 宣布 GSoC 2014 计划Fwd: Google Summer of Code 2014 + 10 Things
  17. P1287 盒子与球
  18. python利用近似公式计算π_python如何利用公式计算π
  19. 差分数组分析详解+例题
  20. 以小饭桌网站为例介绍抓取动态网页的数据【python爬虫入门进阶】(12)

热门文章

  1. java生成pem格式公钥_如何以.pem格式保存证书中的公钥
  2. el-date-picker 的一些小坑(chang事件不生效以及页面数据不更新)
  3. 傅氏级数的各项系数_傅里叶系数的推导
  4. 手机(小米系列)不能安装mitmproxy 证书怎么办
  5. 前端面试想要得高分,看过来~~~
  6. CSS——滤镜(filter )
  7. 程序的耦合性与内聚性的概念 以及 “高内聚,低耦合”
  8. MacBook Air 13.3系统恢复及Windows 10安装心得
  9. threejs 热力图做成材质_ThreeJS 热力图
  10. cf-786B区间图最短路